代码之家  ›  专栏  ›  技术社区  ›  StuffedPoblano

不变的toArray()不会呈现数据-ReactJS

  •  0
  • StuffedPoblano  · 技术社区  · 7 年前

    我正在映射一些数据,并尝试使用一些数据作为语义ui react下拉组件的选项,但即使我添加了 .toArray() 但最后,如果我将数据结构更改为不使用Immutable,则效果很好。我主要想知道为什么,这样我才能更好地了解事情。

    以下是数据与不可变的映射:

              {
                labelingData.map((item, i) => {
                  return (
                    <span key={i}>
                      {
                        item.get('categories').map((category, c) => {
                          return (
                            <span key={c}>
                              {
                                category.get('subcategories').map((subcategory, sc) => {
                                  return (
                                    <span key={sc}>
                                      {
                                        subcategory.get('name') === 'Labels'
                                        ? <Dropdown
                                            defaultValue={'Bananas'}
                                            options={subcategory.get('childItems').toArray()}
                                          />
                                        : null
                                      }
                                    </span>
                                  );
                                })
                              }
                            </span>
                          );
                        })
                      }
                    </span>
                  );
                })
              }

    我确实在控制台中收到一个关于未知道具的错误,但我没有在代码中添加这些道具:

    Unknown props `_root`, `__ownerID`, `__hash`, `__altered` on <div> tag. Remove these props from the element

    1 回复  |  直到 7 年前
        1
  •  1
  •   willwoo    7 年前

    这个 api of semantic-ui-react 下拉选项是传入一组对象,这些对象看起来像:

    { text: '', value: '' }
    

    然而,当你打电话时 .toArray() Immutable.List 包含一些 Immutable.Map 不会的 .toJS() 地图。

    如。

    var list = Immutable.fromJS({ value: 1 }, 2]);
    console.log(list.toArray()); // prints [Immutable.Map, 2]
    

    所以你实际上是给下拉菜单一个地图数组,而下拉菜单不使用 .get 从对象中获取值。

    另一件事是React更喜欢接收数组,而不是不可变的。列表。

    item.get('categories').reduce((result, category, c) => {
      result.push(<Category key={c} category={category} />);
      return result;
    }, []);