当前位置: 首页 > 知识库问答 >
问题:

React组件中具有相同键的两个子组件

杨腾
2023-03-14
this.props.items = [ { name: 'a', price: 10},
                     { name: 'b', price: 20},
                     { name: 'c', price: 10},
                     { name: 'd', price: 30},
                   ];

我想创建一个包含所有价格选项的列表,并将唯一的值放在下拉列表中,所以我这样做:

  const priceOptions = [{ text: '', value: '' }];

  const prices = [
    ...new Set(this.props.items.map(item => item.price)),
  ];
  prices.forEach(price => {
    if (price) {
      priceOptions.push({
        key: price,
        text: price,
        value: price,
      });
    }

此代码引发错误:

警告:遇到具有相同键ellipsisitem-nan的两个子项。键应该是唯一的,以便组件在更新时维护它们的标识。非唯一键可能导致重复和/或省略子键-此行为不受支持,并且可能在未来版本中更改。

  const prices = [
    ...new Set(this.props.items.map(item => item.price)),
  ];
  prices.forEach((price, index) => {
    if (price) {
      priceOptions.push({
        key: index,
        text: price,
        value: price,
      });
    }
  });

10,20,10,3010,20,30

更新我也添加到它呈现的地方。

return (
  <Layout>
     ...
     <Dropdown
        placeholder="Price"
        onChange={this.searchHandlerPrice}
        options={priceOptions}
     />

和SearchHandlerPrice:

  searchHandlerPrice = (event, data) => {
    const { getItems } = this.props;
    geItems({
      name: this.props.query.name,
      price: data.value,
    });
  };
import React from 'react';
import { Dropdown } from 'semantic-ui-react';

import './Dropdown.styles.scss';

export default ({placeholder, options, onChange}) => {
    return (
        <Dropdown className="hello-dropdown"
            placeholder={placeholder}
            search
            selection
            options={options}
            onChange={onChange}
            clearable
        />
    );
};

共有1个答案

南门鸿哲
2023-03-14

不确定问题出在哪里。然而,我使用MATERIAL UI的SELECT标记重新创建了这个问题,一切似乎都很好。

在app.js中

class App extends React.Component {
  items = [
    { name: "a", price: 10 },
    { name: "b", price: 20 },
    { name: "c", price: 10 },
    { name: "d", price: 30 }
  ];

  render() {
    return (
      <div className="App">
        <Select items={this.items} />
      </div>
    );
  }
}

export default App;

在select.js中

export default function SelectForm(props) {
  const classes = useStyles();
  const [price, setPrice] = React.useState("");
  const [uniquePrice, setUniquePrice] = React.useState([]);

  React.useEffect(() => {
    const newPrice = [...new Set(props.items.map(item => item.price))];
    setUniquePrice(newPrice);
  }, [props]);

  const handleChange = event => {
    setPrice(event.target.value);
  };

  return (
    <div className="App">
      <FormControl className={classes.formControl}>
        <InputLabel id="demo-simple-select-label">Price List</InputLabel>
        <Select value={price} onChange={handleChange}>
          {uniquePrice.map(price => (
            <MenuItem key={price} value={price}>
              {price}
            </MenuItem>
          ))}
        </Select>
        <p>Selected Value: {price}</p>
      </FormControl>
    </div>
  );
}
 类似资料:
  • 我有一个具有相同键值uid的多维数组。我想把它转换成子数组通过限制Foreachloop.you可以看到两个uid有值100和两个uid有值5465 我想得到这样的阵列。 我可以不使用foreach循环得到结果吗?

  • 我正在将某些程序集打包到 msi 包中。在执行此操作时,我要求将一些程序集放入本地文件系统以及目标计算机的 GAC 中。众所周知,在这种情况下,重复文件表将无济于事。我决定将程序集放在具有不同标识符的 CAB 文件中两次。现在,为了填充组件表,我有不同的组件标识符,但我没有用于类似程序集的不同组件 GUID。我的问题是,如果我为具有不同组件标识符(在组件表中)的条目保持GUID(因为基本上程序集是

  • 我在React中使用一个调色板生成器,我遇到的问题是,当我尝试将不同的颜色传递给将形成调色板的每个子divs时,每个子divs都得到相同的颜色。 这是密码 基本上父组件将相同的颜色传递给所有3个子组件,因为我传递了相同的状态。知道我怎么通过不同的颜色吗?

  • 我最近在我的路由中实现了反应路由器开关组件,以便呈现一个NoMatch组件(这只是一个404错误组件)。然而,在我的路由中实现这一点后,我注意到在我的主页上只有一个组件会呈现,标题组件。 标题和搜索栏都应该呈现到相同的路径。 我的代码如下: 我注意到如果我删除了Switch组件,那么一切都会渲染得很好,但是NoMatch组件也会渲染到路由。 问题:为什么我不能在交换机内部的同一路径上渲染多个组件?

  • 我有react组件A,它呈现一个表。表中某一列的数据通过另一个组件B呈现,因此是的子级。每当用户单击页面上的任何位置时,我希望在上执行一些操作。此click事件侦听器是在中定义的。如何从类内循环所有?我的组件结构如下所示: 我遇到了,但当通过将子级作为道具传递时,这很有用;例如,当代码如下所示时:

  • 问题内容: 我有两个数组:一个数组填充了来自ajax请求的信息,另一个数组存储了用户单击的按钮。我使用以下代码(我填写了示例编号): 但是,即使两个数组相同,但名称不同,它总是给出。(我在Chrome的JS控制台中对此进行了检查)。那么,有什么办法可以知道这两个数组是否包含相同的数组?为什么给?我怎么知道第一个数组中的哪个值不在第二个数组中? 问题答案: 请注意,这不会像以前的答案那样修改原始数组