Ibr*_*med 4 javascript arrays state typeerror reactjs
如何更新状态数组中的单个元素?这是我目前使用的代码:
const Cars = props => {
const [cars, setCars] = React.useState(["Honda","Toyota","Dodge"])
const handleClick1 = () => { setCars[0]("Jeep") }
const handleClick2 = () => { setCars[1]("Jeep") }
const handleClick3 = () => { setCars[2]("Jeep") }
return (
<div>
<button onClick={handleClick1}>{cars[0]}</button>
<button onClick={handleClick2}>{cars[1]}</button>
<button onClick={handleClick3}>{cars[2]}</button>
</div>
)
};
Run Code Online (Sandbox Code Playgroud)
当我单击呈现的按钮之一时,我得到Uncaught TypeError: setCars[0] is not a function at handleClick1
.
我知道如何在 React 类中执行此操作,但是如何使用 React Hooks 执行此操作?
Mat*_*ich 11
我建议你通过你的地图cars
来渲染它们 - 这总体上简单一百万倍。从那里您可以将onClick
处理程序应用于每个按钮..
此外,你不应该像你一样改变状态——总是先复制状态,更新副本,然后用更新的副本设置新状态。
编辑:之前让我想到的一件事key
是map
在对数组执行 ping 操作时为每个项目添加一个。这应该是标准做法。
const { useState } = React;
const { render } = ReactDOM;
const Cars = props => {
const [cars, setCars] = useState(["Honda", "Toyota", "Dodge"]);
const updateCars = (value, index) => () => {
let carsCopy = [...cars];
carsCopy[index] = value;
setCars(carsCopy);
};
return (
<div>
{cars && cars.map((c, i) =>
<button key={`${i}_${c}`} onClick={updateCars("Jeep", i)}>{c}</button>
)}
<pre>{cars && JSON.stringify(cars, null, 2)}</pre>
</div>
);
};
render(<Cars />, document.body);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.11.0/umd/react-dom.production.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5858 次 |
最近记录: |