redux saga操作如何延迟存储数据更新?

时间:2019-08-24 10:57:14

标签: javascript reactjs react-redux redux-form redux-saga

获取后不能延迟动作触发(从redux形式初始化)以存储数据更新。

  1. 商店正在使用空帐户对象进行初始化。
  2. 在初始渲染getAccount动作时触发并触发商店更新。
  3. useEffect查看商店更新并第二次触发getAccount操作
  4. 第二次数据请求
  5. END
  const {getAccount, initialize} = props
  prepareData = () => {...prepared obj}

  useEffect(() => {
    const begin = async () => {
      await getAccount();
      await initialize(prepareData());
    };
    begin();
  }, [account.id]);

主要目的是避免不必要的第二次请求

2 个答案:

答案 0 :(得分:0)

如果您要在begin通话中添加条件怎么办?

 const {getAccount, initialize} = props
 const {begun, setBegun} = useState(false)
  prepareData = () => {...prepared obj}

  useEffect(() => {
    const begin = async () => {
      await setBegun(true);
      await getAccount();
      await initialize(prepareData());
    };

    begun || begin();
  }, [account.id]);

答案 1 :(得分:0)

如果getAccount不存在,应该调用account.id吗?如果不是,那么只需在调用begin之前检查account.id是否存在。

  const {getAccount, initialize} = props
  prepareData = () => {...prepared obj}

  useEffect(() => {
    // add a guard condition to exit early if account.id doesn't exist yet
    if (!account.id) {
      return;
    }
    const begin = async () => {
      await getAccount();
      await initialize(prepareData());
    };
    begin();
  }, [account.id]);