多次调用 React 函数
React function called multiple time
我想了解为什么我的函数被调用了 5 次。
函数 return 前 3 次什么都没有,然后两次都没有数据。当数据准备好时,我希望它只 运行 一次。
父组件:
export default function PublicCircles() {
const [circles, getCircles] = useState('');
const accessToken = window.localStorage.getItem('accessToken')
useEffect(() => {
getPublicCircles();
}, []);
const getPublicCircles = () => {
const headers = {
'Content-Type': 'application/json',
'Accept-Language': 'fr',
'Authorization': `Bearer ${accessToken}`,
}
axios.get('https://myurl.com/api/get-public-circles?lang=All', { headers })
.then((response) => {
const publicCircles = response.data.data;
getCircles(publicCircles);
})
.catch(error => console.log('error', error))
};
return (
<PublicCircle circles={circles} />
)
}
子组件:
export default function PublicCircle(props) {
console.log(props.circles)
return(
<>
</>
)
}
结果:
谢谢。
I would like it to run only only once, when the data are ready.
所以您根本不希望 <PublicCircle>
组件在您发送的 prop 有数据之前呈现?在这种情况下,您应该有条件地渲染它。目前你一直在渲染它:
return (
<PublicCircle circles={circles} />
);
但是你可以简单地在里面引入一个条件。 circles
的默认值是一个空字符串:
const [circles, getCircles] = useState('');
所以检查条件。例如:
return (
circles === '' ? null :
<PublicCircle circles={circles} />
);
然后 PublicCircles
组件将默认不呈现任何内容 (null
),并在 circles
包含数据时呈现 <PublicCircle>
元素。
请注意,出于多种原因,您的组件 可能仍 re-render。此处或层次结构上方任何位置的任何状态更改都可以触发 re-render.
我想了解为什么我的函数被调用了 5 次。 函数 return 前 3 次什么都没有,然后两次都没有数据。当数据准备好时,我希望它只 运行 一次。
父组件:
export default function PublicCircles() {
const [circles, getCircles] = useState('');
const accessToken = window.localStorage.getItem('accessToken')
useEffect(() => {
getPublicCircles();
}, []);
const getPublicCircles = () => {
const headers = {
'Content-Type': 'application/json',
'Accept-Language': 'fr',
'Authorization': `Bearer ${accessToken}`,
}
axios.get('https://myurl.com/api/get-public-circles?lang=All', { headers })
.then((response) => {
const publicCircles = response.data.data;
getCircles(publicCircles);
})
.catch(error => console.log('error', error))
};
return (
<PublicCircle circles={circles} />
)
}
子组件:
export default function PublicCircle(props) {
console.log(props.circles)
return(
<>
</>
)
}
结果:
谢谢。
I would like it to run only only once, when the data are ready.
所以您根本不希望 <PublicCircle>
组件在您发送的 prop 有数据之前呈现?在这种情况下,您应该有条件地渲染它。目前你一直在渲染它:
return (
<PublicCircle circles={circles} />
);
但是你可以简单地在里面引入一个条件。 circles
的默认值是一个空字符串:
const [circles, getCircles] = useState('');
所以检查条件。例如:
return (
circles === '' ? null :
<PublicCircle circles={circles} />
);
然后 PublicCircles
组件将默认不呈现任何内容 (null
),并在 circles
包含数据时呈现 <PublicCircle>
元素。
请注意,出于多种原因,您的组件 可能仍 re-render。此处或层次结构上方任何位置的任何状态更改都可以触发 re-render.