代码之家  ›  专栏  ›  技术社区  ›  C Sharper

React Js:重新渲染过多。React限制渲染的数量以防止无限循环

  •  0
  • C Sharper  · 技术社区  · 4 年前

    2个文本框-1个用于键,1个用于值

    在列表中显示数组

    为此,我在React Js中创建了组件-

    import React, { useState } from 'react';
    
    function  HookArray() {
        const[lKey,setKey]=useState('');
        const[lValue,setValue]=useState('');
        const[lKeyValue,setArray]=useState({id:'',value:''});
    
        const addItem=()=>{
                setArray(...lKeyValue,{lKey,lValue})
        }
    
        return(
            <div>
                <div id="divArrayList">
                    
                    <ul>
                        {
                            
                            lKeyValue.map(x=>
                                (
                                 <li key={x.id} value={x.value}></li>   
                                ))
                        }
                    </ul>
                </div>
                <input id="txtKey" type="text"  onChange={setKey(x=>x.target.value)} ></input>
                <br></br>
                <input id="txtValue" type="text"  onChange={setValue(x=>x.target.value)}></input>
                <br></br>
                <input type="button" onClick="addItem();">Add</input>
            </div>
        )
    }
    export default HookArray;
    

    但这是在运行时抛出错误-

    Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
    
    0 回复  |  直到 4 年前
        1
  •  4
  •   Drew Reese    4 年前

    onChange 事件对象,以便可以访问该值。对于按钮,您可以简单地附加处理程序,因为事件是不相关的。

     <input
       id="txtKey"
       type="text"
       onChange={e => setKey(e.target.value)} // callback accepts event object
     />
     ...
     <input
       id="txtValue"
       type="text"
       onChange={e => setValue(e.target.value)} // callback accepts event object
     />
     ...
     <input
       type="button"
       onClick={addItem} // direct attach addItem callback
     >
       Add
     </input>