Porušenie invariantu: Objekty nie sú platné ako potomok React

V mojej funkcii vykresľovania komponentov mám:

render() {
    const items = ['EN', 'IT', 'FR', 'GR', 'RU'].map((item) => {
      return (<li onClick={this.onItemClick.bind(this, item)} key={item}>{item}</li>);
    });
    return (
      <div>
        ...
                <ul>
                  {items}
                </ul>
         ...
      </div>
    );
  }

všetko sa vykreslí v poriadku, avšak pri kliknutí na prvok <li> dostanem nasledujúcu chybu:

Uncaught Error: Invariant Violation: Objekty nie sú platné ako React child (found: object with keys {dispatchConfig, dispatchMarker, nativeEvent, target, currentTarget, type, eventPhase, bubbles, cancelable, timeStamp, defaultPrevented, isTrusted, view, detail, screenX, screenY, clientX, clientY, ctrlKey, shiftKey, altKey, metaKey, getModifierState, button, buttons, relatedTarget, pageX, pageY, isDefaultPrevented, isPropagationStopped, _dispatchListeners, _dispatchIDs}). Ak ste chceli vykresliť kolekciu detí, použite namiesto toho pole alebo zabalte objekt pomocou createFragment(object) z doplnkov React. Skontrolujte metódu vykresľovania Welcome.

Ak zmením this.onItemClick.bind(this, item) na (e) => onItemClick(e, item) vnútri funkcie map, všetko funguje podľa očakávania.

Ak by mi niekto mohol vysvetliť, čo robím zle a prečo dostávam túto chybu, bolo by to skvelé

UPDATE 1: Funkcia onItemClick je nasledovná a odstránenie this.setState má za následok zmiznutie chyby.

onItemClick(e, item) {
    this.setState({
      lang: item,
    });
}

Ale nemôžem odstrániť tento riadok, pretože potrebujem aktualizovať stav tohto komponentu

Vyskytla sa mi táto chyba a ukázalo sa, že som do svojho kódu JSX neúmyselne zahrnul objekt, ktorý som očakával ako reťazcovú hodnotu:

return (

        {breadcrumbElement}

)

breadcrumbElement mal byť reťazec, ale kvôli refaktoru sa stal Objektom. Nanešťastie, chybové hlásenie React'u neodvádzalo dobrú prácu, aby ma upozornilo na riadok, kde sa vyskytoval problém. Musel som sledovať svoj stack trace až nahor, kým som nerozpoznal, že "props" sa odovzdáva do komponentu, a potom som našiel chybný kód.

Budete'musieť buď odkazovať na vlastnosť objektu, ktorá je reťazcovou hodnotou, alebo previesť objekt na reťazcovú reprezentáciu, ktorá je žiaduca. Jednou z možností môže byť JSON.stringify, ak chcete skutočne vidieť obsah Objektu.

Komentáre (6)

Pri pokuse o zobrazenie vlastnosti createdAt, ktorá je objektom Date, sa mi vyskytla táto chyba. Ak na konci takto spojíte .toString(), vykoná sa konverzia a chyba sa odstráni. Uverejňujem to len ako možnú odpoveď pre prípad, že by niekto iný narazil na rovnaký problém:

{this.props.task.createdAt.toString()}
Komentáre (1)

Vďaka komentáru od zerkms som si všimol svoju hlúpu chybu:

Mal som tam onItemClick(e, item), keď som mal mať onItemClick(item, e).

Komentáre (0)