首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当用户完成输入时如何添加到数组?

当用户完成输入时如何添加到数组?
EN

Stack Overflow用户
提问于 2022-10-18 13:27:04
回答 3查看 42关注 0票数 0

我有以下数组:

代码语言:javascript
复制
const [stock, setStock] = useState([])

我还有两个输入字段要输入股本(这是针对不同的产品,但所有股票必须添加到股票数组状态)。

如何将股票输入值添加到股票数组中?我只想在用户完成输入时添加股票。只有一个提交按钮和两个股票输入。

如果我只有一个股票字段,我就会用onChange事件将它保存在股票状态,但是在那里我有两个股票字段,所以我想使用一个数组。

编辑:使用基于颜色和大小值的映射来呈现产品的每个变体的库存输入。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-18 13:36:08

我会使用一个对象,您可以在这个对象上使用类似于输入的名称之类的东西作为键,然后将状态设置为输入字段的值。

这样,您就可以动态地为每个产品添加值。

代码语言:javascript
复制
const { useState } = React;

const Example = () => {

    const [stock, setStock] = useState({ })

    function addStock(){
        setStock({
            ...stock,
            [event.target.name]: event.target.value
        });
    }
    
    console.log(stock);
    
    return (  
        <div>
            <label for={'product_1'}>{'Product 1'}</label>
            <input onChange={addStock} name={'product_1'} />
            <br />
            <label for={'product_2'}>{'Product 2'}</label>
            <input onChange={addStock} name={'product_2'} />
        </div>
    )
}
ReactDOM.render(<Example />, document.getElementById("react"));
代码语言:javascript
复制
<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>
<div id="react"></div>

基于OP的comment编辑;

如果输入是由map()生成的,您只需要找到一个唯一的键作为name,因此也就是对象键。

考虑下面的代码片段,与上面的想法相同,但是使用map(),它为data数组中的每个对象提供了reders <input><label>

代码语言:javascript
复制
const { useState } = React;

const data = [
    { color: 'red', size: 15 },
    { color: 'blue', size: 30 }
];

const Example = () => {

    const [stock, setStock] = useState({ })

    function addStock(){
        setStock({
            ...stock,
            [event.target.name]: event.target.value
        });
    }
    
    console.log(stock);
    
    return (  
        <div id='demo'>
            {
                data.map(d => {
                    const customKey = Object.values(d).join('_');
                    
                    return (
                        <React.Fragment>
                            <label for={customKey}>{customKey}</label>
                            <input onChange={addStock} name={customKey} />
                        </React.Fragment>
                    );
                })
            }
        </div>
    )
}
ReactDOM.render(<Example />, document.getElementById("react"));
代码语言:javascript
复制
#demo { width: 150px; display: flex; flex-direction: column; }
代码语言:javascript
复制
<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>
<div id="react"></div>

票数 3
EN

Stack Overflow用户

发布于 2022-10-18 13:35:49

您将以以下方式使用带有两个键(每个输入一个)的object

代码语言:javascript
复制
const [stock, setStock] = useState({})


function handleChange(event) {
   setStock({..stock, [event.target.name]: event.target.value});
}

return (
   <input name="item1" onChange={handleChange} />
   <input name="item2" onChange={handleChange} />
)
票数 1
EN

Stack Overflow用户

发布于 2022-10-18 13:36:05

您可以创建一个临时的第二状态来存储股票。

代码语言:javascript
复制
// temporary stock state
const [tmpStock1, setTmpStock1] = useState(0);
const [tmpStock2, setTmpStock2] = useState(0);

const [stock, setStock] = useState([])

然后更新每个输入的onChange事件的状态。单击按钮时,可以将这两种状态保存到数组中,并可能重置。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74111820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档