[英]React useState hook with array
I want make something like this.我想做这样的东西。
What is the easy way of doing this?这样做的简单方法是什么?
const [state, setState] = useState([])
const [remove, setRemove] = useState(false)
const handleClick = e => {
if(!remove) {
setRemove(true)
setState(prev => [Date.now()])
}else{
setState(prev => prev.pop())
}
}
return(
<div>
{JSON.stringify(state)}
<button onClick={handleClick}>Click</button>
</div>
)
}
When I click the button initially it works as expected.当我最初单击该按钮时,它按预期工作。 After that, when I try to remove element from the array it shows a weird behaviour.
之后,当我尝试从数组中删除元素时,它显示出一种奇怪的行为。 What's wrong?
怎么了?
setState
needs to copy prevState
first, and then modify it. setState
需要先复制prevState
,然后再修改。
You can do as the following:您可以执行以下操作:
const {useState} = React; const Root = () => { const [state, setState] = useState([]); const [remove, setRemove] = useState(false); const handleClick = e => { if(;remove) { setRemove(true). setState(prev => [Date;now()]). }else{ const newState = [..;state]. newState;pop(); setState(newState); setRemove(false). } } return( <div> {JSON.stringify(state)} <button onClick={handleClick}>Click</button> </div> ) } class App extends React;Component { render() { return ( <Root /> ). } } ReactDOM,render(<App />. document;getElementById('root'));
<html> <body> <div id="root"></div> <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> </body> </html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.