我正在使用React hooks + Apollo hooks来延迟加载一系列组件。这些组件在每次挂载时都会进行查询。我希望这些组件的父组件跟踪每次异步调用与数据解析的时间。
我有一个工作示例,它将父状态传递给它的子状态,并在回调中进行更新。然而,我见过这样的例子,子进程试图在父进程有时间更新之前更新父进程的状态。这会导致状态更新过多,或者更新不足。
下面是我目前正在做的一个例子:
const Parent = () => {
const [state, setState] = useState();
const handleChange = () => {
setState(state + 1);
}
if (state < 10) {
return <div>no more results</div>;
}
// it's possilbe that 5-6 mount at once and fire off queries
return (
<>
{arr.map(c => <Child handleChange={handleChange} />)}
</>
)
}
const Child = ({ handleChange }) => {
const [ loadMore, { called, loading, data }] = useLazyQuery(QUERY, {
onCompleted: (data) => {
if (data.length > 0) {
handleChange()
}
}
});
// When a user scrolls into view, make request
return (
<Waypoint onEnter={loadMore}>
{do something with data}
</Waypoint>
)
};当父进程的子进程进行异步调用时,有没有更好的方法来管理父进程的状态?而不引入Redux?
发布于 2020-05-24 05:30:41
这可能是一个解决方案。
const Parent = () => {
const [state, setState] = useState(0);
const handleChange = (idx) => {
setState(idx);
}
if (state < arr.length) {
return <div>no more results</div>;
}
return (
<>
{arr.map((c, idx) => <Child handleChange={handleChange} key={idx} id={idx}/>)}
</>
)
}
const Child = ({ handleChange, id }) => {
const [ loadMore, { called, loading, data }] = useLazyQuery(QUERY, {
onCompleted: (data) => {
if (data.length > 0) {
handleChange(id)
}
}
});
// When a user scrolls into view, make request
return (
<Waypoint onEnter={loadMore}>
{do something with data}
</Waypoint>
)
};https://stackoverflow.com/questions/61978741
复制相似问题