【问题标题】:React functional component is not rendering when updating the Sate after pushing data to array将数据推送到数组后更新日期时,React 功能组件未呈现
【发布时间】:2020-05-22 21:46:56
【问题描述】:

我正在尝试创建一个动态输入表单,用户可以在其中添加新输入。

问题

State 更新时组件未呈现,但是当我打开存在于使用State 打开/关闭它的同一组件中的Model 时,数组中的所有推送元素显示在一个时间。

Modal的代码我没有写,是为了方便阅读代码

我的代码

   const [supply_detail_list,setSupply_detail_list] = React.useState([
        {supplyDetail:'',supplyDetailAmount:''}
    ]);
    const addNewSuppDetailInput = () => {
        supply_detail_list.push({supplyDetail:'',supplyDetailAmount:''});
        setSupply_detail_list(supply_detail_list) 
    }

JSX

<div onClick={addNewSuppDetailInput}>+</div>
    {
        supply_detail_list.map((val,index) => {
            console.log('rendered')
            const detalTextID = 'supply_detail_text' + index;
            const detalValtID = 'supply_detail_val'+ index;
            return (
            <div className='supply-details'>
            •<input type='text' name={detalTextID} onChange={supply_detail_handler}/> <input className ='detail-value' onChange={supply_detail_handler} name={detalValtID} type='number'/>
            </div>
            );

        }) 
    }
    </div>

【问题讨论】:

    标签: javascript reactjs rendering react-functional-component use-state


    【解决方案1】:

    react 期望您在想要更新它而不是改变它时返回一个新数组。试试这样的:

    const addNewSuppDetailInput = () => {
      setSupply_detail_list([
        ...supply_detail_list,
        { supplyDetail: '', supplyDetailAmount: '' },
      ]);
    };
    

    【讨论】:

    • 成功了。但这如何将新元素推送到supply_detail_list
    • 它基本上是array.concat 的语法糖。 array.concat 返回一个新数组,而不是改变当前数组。因此,如果您这样做 setSupply_detail_list(supply_detail_list.concat({ supplyDetail: '', supplyDetailAmount: '' })) 也会起作用
    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 2017-08-27
    • 2021-07-29
    • 2021-02-27
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多