我如何更新react.js中状态的选择选项
我创建了一个输入,当您写一些内容并单击按钮时,值会添加到我们的状态中, 现在我正在尝试更新状态中的选择选项,如下所示:
const NewGroup = () => {
const [group, setGroup] = useState([]);
const addToGroup = (e) => {
const newGroup = group;
newGroup.push(e.target.previousElementSibling.value);
setGroup(newGroup);
};
return (
<div>
<input type="text" name="" id="" />
<button onClick={addToGroup}>submit</button>
<div>
<select name="" id="">
{group.map((category) => {
return <option value=''>{category}</option>;
})}
</select>
</div>
</div>
);
};
export default NewGroup;
但什么也没发生。
I created an input, when you write something and click on the button, value adds to our state,
now I am trying to update select option from state like this:
const NewGroup = () => {
const [group, setGroup] = useState([]);
const addToGroup = (e) => {
const newGroup = group;
newGroup.push(e.target.previousElementSibling.value);
setGroup(newGroup);
};
return (
<div>
<input type="text" name="" id="" />
<button onClick={addToGroup}>submit</button>
<div>
<select name="" id="">
{group.map((category) => {
return <option value=''>{category}</option>;
})}
</select>
</div>
</div>
);
};
export default NewGroup;
But nothing did happened.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以引入另一个
useState()
来写入元素。当按下“提交”按钮时,您只需将
someText
推送到group
数组。以下是工作应用程序的链接 https://codesandbox。 io/s/boring-ptolemy-0cwzmi?file=/src/App.js
You can introduce another
useState()
for writing into<input>
element. And when the Submit button is pressed, you only push thesomeText
to thegroup
array.Here's the link to the working app https://codesandbox.io/s/boring-ptolemy-0cwzmi?file=/src/App.js
首先,您不应该直接使用 DOM 来获取输入的值,而应该使用 Ref。
其次,问题是您直接改变组值而不是复制它。当你调用 setGroup 时,React 不会意识到有任何变化(因为之前的值等于当前值)。相反,您想要复制数组并添加新元素:
这应该是让代码正常工作所需要做的全部事情。不过,我通过下面的内联注释对其进行了进一步简化和清理。
First, you should not be getting the value of your input by using the DOM directly, instead you should be using a Ref.
Secondly, the issue is that you're mutating the group value directly instead of copying it. When you call setGroup, React doesn't realize there was any change (because the previous value equals the current value). Instead you want to copy the array and add your new element:
That should be all you have to do to get your code to work. However, I simplified and cleaned it up a little more with inline comments below.