简体   繁体   English

如何设置初始状态作为道具与钩子的反应?

[英]How to set inital state as props in react with hooks?

I want to set state as props in react using hooks and I'm getting error: Too many re-renders. React limits the number of renders to prevent an infinite loop. ▶ 34 stack frames were collapsed. 我想使用钩子将状态设置为props,但出现错误: Too many re-renders. React limits the number of renders to prevent an infinite loop. ▶ 34 stack frames were collapsed. Too many re-renders. React limits the number of renders to prevent an infinite loop. ▶ 34 stack frames were collapsed.

My code: First Component : 我的代码:第一个组件:

const List = () => {
    const [items, setItems] = useState([{}])
    useEffect(() => {
        const fetchData = async () => {
            const data = await fetch(
                'http://localhost:5000/api',
            );
            const result = await data.json();
            setItems(result);
        };
        fetchData();
    }, []);
   return (
          <ActualList items={items}/>
    )
}

and the second component: 第二部分:

const ActualList = props => {
    const [items, setItems] = useState([{}])
    setItems(props.items)
    }
...

You can directly pass props to useState : 您可以直接将道具传递给useState

const ActualList = props => {
    const [items, setItems] = useState(props.items) // pass props.items as an initial state
    }

You are calling setItem in every render. 您正在每个渲染中调用setItem。 Each time you change a state value, your component will be re-rendered, which will cause another state change, another re-render.... 每次更改状态值时,组件将被重新渲染,这将导致另一个状态更改,另一个重新渲染。

You should conditionally call setItems 您应该有条件地调用setItems

So I eventually figured out how to do this, in case someone needs it here is the code : 所以我最终想出了办法,以防万一有人需要,这里是代码:

const [items, setItems] = useState([{}]);
useEffect(() => setItems(props.items), [props])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM