javascript - 无法更新 React Js 中的状态

标签 javascript reactjs react-native react-redux react-hooks

我正在使用表输入字段来更新 map 函数下的状态,以根据状态中的元素数量呈现它。但是当我使用value={item.account}时,值不会更新当我使用 **value={accountCounter.account} 时 state.which 工作正常,其中 accountCounter 是类型为 Reactjs 的钩子(Hook)

const[accountCounter,setAccountCounter]=useState([
          { id: 1, account:"" ,accountOwner:""},
          { id: 2, account: "hi",accountOwner:"" },
          { id: 3, account: "bu" ,accountOwner:""}

这是我的渲染函数

 accountCounter.map((item,key)=>{
  return(
    <tr key={key}>
    <td><input  type="text" value={item.account}
    name="account" onChange={(e)=>handleAccountCounter(e,item)}/></td>
    <td><input  type="text" value={item.accountOwner}
    name="accountName" onChange={(e)=>handleAccountCounter(e,item)}/></td>
    <td><span onClick={()=>deleteAccount(item.id)}>X</span></td>
    </tr>   
     )
  })}

这是我的handleAccountCounter

const  handleAccountCounter=(event,counter)=>{
 const index = accountCounter.indexOf(counter);
 accountCounter[index][event.target.name]=event.target.value;
 setAccountCounter(accountCounter)
  }

但是在输入字段value={item.account}中状态没有被修改。不知道为什么..你能帮我吗

最佳答案

使用之前的状态值创建一个新数组:

const App = () => {
  const [accountCounter, setAccountCounter] = useState([
    { id: 1, account: "", accountOwner: "" },
    { id: 2, account: "hi", accountOwner: "" },
    { id: 3, account: "bu", accountOwner: "" }
  ]);

  const handleAccountCounter = (event, counter) => {
    setAccountCounter((prevAccountCounter) => {
      const newCounter = [...prevAccountCounter];
      newCounter[prevAccountCounter.indexOf(counter)][event.target.name] =
        event.target.value;
      return newCounter;
    });
  };

  const deleteAccount = (id) => {
    setAccountCounter((prevAccountCount) =>
      prevAccountCount.filter((item) => item.id !== id)
    );
  };

  return accountCounter.map((item, index) => (
    <tr key={index}>
      <td>
        <input
          type="text"
          value={item.account}
          name="account"
          onChange={(e) => handleAccountCounter(e, item)}
        />
      </td>
      <td>
        <input
          type="text"
          value={item.accountOwner}
          name="accountOwner"
          onChange={(e) => handleAccountCounter(e, item)}
        />
      </td>
      <td>
        <span onClick={() => deleteAccount(item.id)}>X</span>
      </td>
    </tr>
  ));
};

关于javascript - 无法更新 React Js 中的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67372992/

相关文章:

javascript - 为什么当我检查 If 语句是否未定义时 If 语句会抛出未定义错误?

javascript - 如何在使用 Javascript 更改图像源后立即更新屏幕?

javascript - 如何停止 Django 线程

javascript - 在 WebStorm 上的每个文件键上触发 React-native 热重载

gradle - React Native 示例(UIExplorer)构建问题

javascript - 如何确定 jQuery 是否在页面上运行(即使 jQuery 是/之后/检测脚本)

javascript - 对 OnSubmit 感到困惑

javascript - 函数未在 setTimeout 内执行

javascript - 显示错误以上传文件或禁用按钮

android - 如何从手机通讯录中查找注册用户