Reactjs 未捕获错误:重新渲染过多。React限制渲染的数量以防止无限循环

Reactjs 未捕获错误:重新渲染过多。React限制渲染的数量以防止无限循环,reactjs,Reactjs,在从一个页面导航到另一个页面之后,我尝试向页面的表中添加一个新行。下面的代码将产生一个无限循环。我怎样才能避免呢 function createData(videos, status, model, manage, device, favourite) { return { videos, status, model, manage, device, favourite }; } const rows = [ createData("https://www.youtube.co

在从一个页面导航到另一个页面之后,我尝试向页面的表中添加一个新行。下面的代码将产生一个无限循环。我怎样才能避免呢

function createData(videos, status, model, manage, device, favourite) {
  return { videos, status, model, manage, device, favourite };
}
const rows = [
  createData("https://www.youtube.com/watch?v=ug50zmP9I7s", 'Online', 2, 24, 'Cam1', true),
  createData("https://www.youtube.com/watch?v=Bey4XXJAqS8", 'Offline', 2, 37, 'Am2', true),
  createData("https://www.youtube.com/watch?v=Bey4XXJAqS8", 'Online', 2, 24, 'Zam3', false),
  createData("https://www.youtube.com/watch?v=ug50zmP9I7s", 'Offline', 2, 67, 'Dam4', false),
  createData("https://www.youtube.com/watch?v=Bey4XXJAqS8", 'Online', 2, 49, 'Lam5', false),
];
export default function StreamPage(props) {   
  const [Results, setResults] = React.useState(rows);
  let youtubeURL = props.location.deviceRow;
  if (youtubeURL != null && youtubeURL != "") {
    const newRows = [...rows];
    const newData = createData(youtubeURL, 'Online', 4, 49, 'Lam6', false)     
    setResults(newRows.concat(newData))  //   Here I have infinite loop and error 
  }

  return ()
};

多次调用setResults(),因此必须使用一个循环来避免无限循环:

// ...

React.useEffect(() => {
  if (youtubeURL != null && youtubeURL != "") {
    const newData = createData(youtubeURL, 'Online', 4, 49, 'Lam6', false)     
    setResults(prevRows => [...prevRows, newData])
  }
},[youtubeURL])

// ...
这是对我有效的修复方法


非常感谢,阿里,但是现在在使用React.useffect“setResults(newRows.concat(newData))”之后,没有在表中添加新行。有什么想法吗?如果条件满足条件,您能确保您的
满足条件吗?如果条件有效,您能确定,但我猜代码“setResults(prevRows=>[…prevRows,newData])”有问题。您能在日志中打印结果并查看数组是否正在更新吗。你能把代码粘贴到渲染结果数组的地方吗?结果没有更新,问题是如果我在useEffect之外使用setResults(),那么它会给出无限循环错误。
 setResults({ Results: Results.push(newData) })