【发布时间】:2019-08-11 15:45:29
【问题描述】:
这是用例。我们单独的 AJAX 调用在一个钩子后面(我们使用 apollo 钩子)。但是,有时我们需要进行可变数量的调用(可变 for 循环)。初始 AJAX 调用决定了对另一个端点进行多少变量调用。不幸的是,这段代码没有运行(React 运行时错误):
https://jsfiddle.net/dm3b2Lgh/
我看过这个其他问题,但给定的方法不起作用:Why can't React Hooks be called inside loops or nested function?
有没有办法让它工作?
function useInitialAjaxCall() {
const [result, setResult] = React.useState(0);
React.useEffect(() => {
const resultSize = Math.floor((Math.random() * 100) + 1);
Promise.resolve().then(() => setResult(
resultSize
))
}, [])
return result;
}
function useMockAjaxCall(i) {
const [result, setResult] = React.useState();
React.useEffect(() => {
Promise.resolve().then(() => setResult(i));
}, [i])
return result;
}
function useMakeNCalls(n) {
return [...Array(n)].map((_, i) => useMockAjaxCall(i));
}
function useCombineAjaxCalls(n) {
const resultArray = useMakeNCalls(n);
const resultCombined = React.useMemo(() => {
return resultArray.reduce((total, cur) => total + cur, 0);
}, [resultArray])
return resultCombined;
}
function Hello(props) {
const initial = useInitialAjaxCall();
const count = useCombineAjaxCalls(
initial
);
return (
<div>
<div>{initial}</div>
<div>{count}</div>
</div>
);
}
ReactDOM.render(
<Hello name="World" />,
document.getElementById('container')
);
【问题讨论】:
-
那么...问题是什么?
标签: reactjs react-hooks