React Js:重新渲染太多。 React 限制渲染次数以防止无限循环
React Js : Too many re-renders. React limits the number of renders to prevent an infinite loop
我正在尝试创建一个具有 -
的功能
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.
您正在立即调用回调。它们需要以这样的方式定义,以便稍后在 changed/clicked 时调用。传递 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>
我正在尝试创建一个具有 -
的功能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.
您正在立即调用回调。它们需要以这样的方式定义,以便稍后在 changed/clicked 时调用。传递 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>