2016-03-19 12 views
8

コンポーネントを反応させて、私は不変違反:オブジェクトは、私の中に(ネストされたオブジェクトのための)子供に反応

{ 
    _id: xxx, 
    stats: {a: 1, b: 2, c: 3}, 
    shops: [s1, s2, s3] // s1, s2, s3 are all objects 
    ... 
} 

のように見えます。そして、私のコードで、私はそれがオブジェクトであることを指定するオブジェクトuserを持って有効ではありません。

export class UserComponent extends React.Component<void, Props, void> { 
    static propTypes = { 
    user: PropTypes.array, 
    fetchProfile: PropTypes.func.isRequired 
    }; 

    componentDidMount() { 
    this.props.fetchProfile(); 
    } 

    render() { 
    const { user } = this.props; 
    return (
     <div className='container text-center'> 
     {user} 
     <Link to="/">homeE</Link> 
     </div> 
    ) 
    } 
} 

しかし、私はエラーメッセージが言うのコードを実行します。

invariant.js:39 Uncaught Invariant Violation: Objects are not valid as a React child (found: object with keys {thumb, path, photo_id, shop_id, message, _id, date_added}). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons.invaria....

私がcreateFragment(user)ような何かを行うことができているようですが。しかし、このオブジェクトは上記のようなネストされたオブジェクトがたくさんあるので、これは私のためには機能しません。

どのようにこれを解決するか知っていますか?

答えて

16

この行には、objectタイプの値を渡します。

お使いの場合には
<div className='container text-center'> 
    {user} // this is an object 
    <Link to="/">homeE</Link> 
    </div> 

userstringタイプまたはReact componentReact.createElementによって作成された)、またはReact elementsarray型でなければなりません。

ユーザーからいくつかのデータをレンダリングするか、別のコンポーネントにそれを渡す必要がある場合は、あなたがそうすることができます。

<div className='container text-center'> 
    <User data={user} /> 
    <Link to="/">homeE</Link> 
    </div> 

そして、もちろん、あなたがUserは(レンダリング)を処理コンポーネントを、反応定義する必要がありますユーザーオブジェクトのプロパティUserコンポーネントではuserオブジェクトからthis.props.data

+0

を取得できますが、ユーザーには多くのネストされたプロパティがあるため、オブジェクトとして残したいと思います。これはできますか? –

+0

レンダリング 'view'にのみ関与するコンポーネントの' render'メソッドです。いくつかのデータを保存または計算するためのものではありません。 'user'オブジェクトで何をしたいのですか?それを文字列に変換し、そのすべてのキーなどをユーザーに表示することができます。 –

+0

ユーザーはログインしているユーザー情報です。それはname、id、image..etcのような性質のトンを持つでしょう。同じページには、レンダリングのためにuser.reviews、user.stats、user.messages、user.checkinsをとるコンポーネントもあります。また、ユーザはstatのようないくつかのプロパティを持っています。これはちょうどネストされたオブジェクトです。 –

関連する問題