2016-03-19 11 views
8

w moim reagować składnik mam obiektu user który wyglądaInwariant Naruszenie: Obiekty nie są ważne jako React dziecka (dla obiektów zagnieżdżonych)

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

a następnie w moim kodu I określić, że jest to obiekt .

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> 
    ) 
    } 
} 

Ale kiedy uruchomić kod komunikat o błędzie mówi:

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....

wydaje się, że mogę zrobić coś podobnego createFragment(user). Ale to nie działa, ponieważ ten obiekt ma wiele zagnieżdżonych obiektów, takich jak powyższe.

Czy ktoś wie, jak rozwiązać ten problem?

Odpowiedz

16

W tym wierszu podaje się wartość typu object.

<div className='container text-center'> 
    {user} // this is an object 
    <Link to="/">homeE</Link> 
    </div> 

W twoim przypadku user musi być string typ lub React component (tworzone przez React.createElement) lub array typ React elements.

Jeśli potrzebujesz, aby uczynić jakieś dane od użytkownika lub przekazać go do innego składnika, można to zrobić:

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

I, oczywiście, trzeba określić User reagować składnik, którego uchwyt (render) właściwości obiektu użytkownika. W komponencie User możemy uzyskać obiekt user poprzez this.props.data

+0

tak, ale chcę, aby pozostawał obiektem, ponieważ użytkownik ma tyle zagnieżdżonych właściwości. czy to działa? –

+0

Metoda 'renderowania' składnika tylko odpowiedzialna za render 'widok'. Nie służy do przechowywania lub obliczania niektórych danych. Co dokładnie chcesz zrobić z obiektem 'user'? Możesz przekonwertować go na ciąg, a następnie pokazać użytkownikowi wszystkie jego klucze i tak dalej. –

+0

użytkownik jest zalogowanym użytkownikiem. będzie miał mnóstwo właściwości, takich jak nazwa, id, obraz..etc. Na tej samej stronie pojawią się składniki, które wymagają User.reviews, user.stats, user.messages, user.checkins do renderowania. Również użytkownicy mają pewne właściwości, takie jak stat, który jest po prostu obiektem zagnieżdżonym. –

Powiązane problemy