【问题标题】:Object array can't add items on React chips from material-ui对象数组无法从 material-ui 在 React 芯片上添加项目
【发布时间】:2019-09-24 13:28:22
【问题描述】:

我现在在使用 Material-UI 芯片组件时遇到一个小问题。我有一个包含用户列表的选择。当你选择一个用户时,一个带有他号码的芯片会出现在表格的正下方。一切正常,但芯片正在覆盖,而不是添加新的。这是我的代码:

import React from 'react';
import Chip from '@material-ui/core/Chip';

export default function Test(){
   const [chipData, setChipData] = React.useState([]);
   const userArray = [
      {key: 1, label: name1},
      {kel: 2, label: name2}
   ];
   const [userValue, setUserValue] = React.useState('');

   // This come from the select form onChange
   const handleSelect = (e) => {
      setUserValue(e.target.value);
      setChipData([...chipData, {key: e.target.value, label: e.target.value}]);
   }

   const handleDelete = chipToDelete => () => {
      setChipData(chips => chips.filter(chips => chips.key !== chipToDelete.key));
   }

   return(
      <div>
      <TextField
         select
         value={userValue}
         onChange={e => handleSelect(e)}
      >
         {userArray.map(option => (
            <MenuItem key={option.key} value={option.label}>
               {option.label}
            </MenuItem>
         ))}
      </TextField>
      {chipData.map(data => {
         return(
            <Chip
               key={data.key}
               label={data.label}
               onDelete={handleDelete(data)}
            />
         );
      })}
      </div>
   );
}

我尝试使用类似chipData.push({data...}) 的东西,效果很好,但如果我删除其中任何一个,则不允许我添加更多项目。使用上面的代码,芯片只是覆盖了之前点击的那个,而不是添加到数组中。

【问题讨论】:

  • 看看这个codesandbox,我不知道你是如何创建芯片组件的,你有删除芯片的关闭图标吗?请发布用于渲染选择的代码。
  • 问题已更新为邮政编码。芯片不像代码沙盒那样在选择内。试图弄清楚如何做到这一点,但我做不到。芯片仍然覆盖而不是添加。

标签: reactjs material-ui


【解决方案1】:

在线示例,请验证是否有问题:

https://codesandbox.io/s/material-ui-n7kbp 只编辑了关键渲染值:

{chipData.map((data, index) => {
        return (
          <Chip
            key={data.key + index}
            label={data.label}
            onDelete={handleDelete(data)}
          />
        );
      })}

【讨论】:

  • 芯片仍然覆盖而不是添加新的。我认为这与 handleSelect 函数有关。
  • 我用类似代码的例子编辑了答案,请解释问题出在哪里,只编辑了带有索引的芯片的键值。
  • 即使对我来说也是working
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 2020-09-02
相关资源
最近更新 更多