![](/img/trans.png)
[英]I am trying to implement product quantity increment and decrement using react useState hooks
[英]I am trying to add elements to object using usestate in React?
我正在尝试在 useState 挂钩中添加新字段
// prevstate
let [currentdata, setcurrentdata] = useState({
id:'',
name:''
})
我尝试像这样在 object 中添加新字段
setcurrentdata(currentdata => ({
...currentdata,
q: quantity,
}))
但它没有添加新字段
下面的代码片段可能是实现预期目标的一种可能解决方案。
注意:我个人不喜欢将 useState 与此类对象结合使用的想法,而是更喜欢在每个变量上使用多个更简单的 useState。
代码片段
const {useState} = React; const MyFunction = () => { const [badStateObj, setBadStateObj] = useState({ id: '', name: '' }); const clickHandler = (propName) => setBadStateObj(prev => ({...prev, [propName]: prev[propName] || '' })); const updateHandler = (propName, propVal) => setBadStateObj(prev => ({...prev, [propName]: propVal })); return ( <div> {Object.entries(badStateObj).map(([k,v]) => ( <div> Key: {k}   Value: {v}     <button onClick={() => updateHandler(k, prompt( `Enter new value for ${k}` ))} > Update {k} </button> </div> ))} <button onClick={() => clickHandler(prompt('Enter prop name'))} > Add new prop </button> </div> ); }; ReactDOM.render( <div> <h4>Demo showing the useState that I personally dislike</h4> <MyFunction /> </div>, document.getElementById("react") );
<div id="react"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
解释
badStateObj
仅使用id
和name
属性初始化Add new prop
按钮时,可能会添加一个新道具clickHandler
将用户输入的新属性添加为''
值。updateHandler
接受propName
和propVal
作为参数并更新badStateObj
中的适当道具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.