使用子组件中的异步请求更新父组件状态

时间:2020-05-23 21:23:52

标签: reactjs async-await react-hooks react-apollo

我正在使用React钩子+ Apollo hooks来延迟加载一系列组件。这些组件在每次安装时都会进行查询。我希望这些组件的父组件能够跟踪每个异步调用何时使用数据解析。

我有一个工作示例,该示例将父状态传递给它的子状态,并在回调中对其进行更新。但是,我看到了一些实例,其中子级在父级有时间更新之前试图更新父级状态。这导致状态要么更新得过多,要么更新不足。

这是我目前正在做的一个例子:

def firstname(name):
    return name.title()

在子级进行异步调用时,是否有更好的方法来管理父级状态?不引入Redux?

1 个答案:

答案 0 :(得分:0)

这可能是一个解决方案。

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>
  )
};