【发布时间】:2019-04-23 08:34:52
【问题描述】:
我试图将状态设置为对象数组,但它失败了。
我使用 CRA 创建项目,并为状态使用 react-hooks。 我使用 react-apollo-hooks 从 graphql 服务器获取数据。 我只是在codesandbox中声明了数据对象,但这并不影响我的问题。
对于每次点击,使用数据(对象数组)设置状态(对象数组)。
const data = {
lists: [
{
id: "1"
},
{
id: "2"
},
{
id: "3"
}
]
};
const Sample = () => {
const [sample, setSample] = useState([]);
const Updator = async () => {
try {
await data.lists.map(list => {
setSample([
...sample,
{
label: list.id,
value: list.id
}
]);
return true;
});
console.log(sample);
} catch (err) {
throw err;
}
};
return (
<div>
<React.Fragment>
<button
onClick={e => {
Updator();
}}
>
Click me
</button>
<p>
<strong>
{sample.map(single => {
return <div>{single.label}</div>;
})}
</strong>
</p>
</React.Fragment>
</div>
);
};
我在下面附上了所有测试代码。
这里是代码框链接。 https://codesandbox.io/s/zr50rv7qjp
我期待结果
123
通过点击,但结果是
3
另外,对于额外的点击,预期结果是
123 123
我得到
3 3。
当我使用 setSample() 时,我希望函数类似于 Array.push()。但它忽略了所有先前的数据,除了最后一个。
任何帮助将不胜感激!
【问题讨论】:
标签: reactjs react-hooks