2017-01-11 8 views
0

私のアプリケーションでauthenticateリンクへのコンポーネントを作成しようとしています。有効なReact要素(またはnull)が返されなければなりません.ReactJSのエラー

私は次のようにそれを使用したい:私はこのコードを書かれていることについては

<Authenticated> 
    <Link to="/login">Login</Link> 
</Authenticated> 

import React from 'react' 
import { connect } from 'react-redux' 

class Authenticated extends React.Component { 
    render() { 
    let content = null; 
    if(this.props.authenticate) { 
     content = this.props.children 
    } 
    return (
     <span>{content}</span> 
    ) 
    } 
} 

function mapStateToProps(state){ 
    return { 
    authenticate: state.auth.authenticated 
    } 

} 
export default connect(mapStateToProps)(Authenticated) 

検証後に私のリンクが正しく表示されます。しかし、ここの問題はspanです。

<span>{content}</span>、その戻り値Linkspanでラップされています。それは私がそれをグローバルにすることを許していない(どこにでも置く)。

私はspanラッパーの投げ違いを取り除くことにします。

Uncaught Error: Authenticated.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object. at invariant (invariant.js:44) at ReactCompositeComponentWrapper._renderValidatedComponent (ReactCompositeComponent.js:831) at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:362) at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258) at Object.mountComponent (ReactReconciler.js:46) at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371) at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258) at Object.mountComponent (ReactReconciler.js:46) at ReactDOMComponent.mountChildren (ReactMultiChild.js:238) at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:691)

出力からspanを削除してください。

+0

spanの代わりにdivを使用してみます。 –

+0

両方とも同じ効果があります。内部コンポーネント用に書かれたCSSをブロックします。 –

+2

JSXでは、要素のグループを含む要素にラップする必要があります。だから、複数の子供を表示したい場合は、スパン/ divなどを含むラップで囲む必要があります。 –

答えて

0

あなたはDOCあたりとして、React.Fragmentを利用することができます:

Fragments let you group a list of children without adding extra nodes to the DOM.

はこのようにそれを書く:実際のDOM内

class Authenticated extends React.Component { 
    render() { 
    let content = null; 
    if(this.props.authenticate) { 
     content = this.props.children 
    } 
    return (
     <React.Fragmen>{content}</React.Fragment> 
    ) 
    } 
} 

、フラグメントをスキップして、直接コンテンツをレンダリングします反応します。

+0

私はそれをそのように伝えたくありません。子コンポーネントである必要があります。可能性として、その中に複数のリンクがある可能性があります。同様に 'login'、' register'または他のコンポーネントも可能です。私の場合、このソリューションはうまくいきません。 –

+0

ちょうど一度その作業かどうかをチェックするか?どこに問題があるかを把握する。 –

+0

私のコードでもdivとspanで作業しています。だから確実に動作します。ここで問題となるのは、子コンポーネントに 'div'や' span'やその影響が及ばないようにする方法です。 –

関連する問題