React 工具包查询。调度工作不正确

问题描述 投票:0回答:1

在“for”循环内,“getKeys”函数应创建 POST 请求,并在响应中更新“encryptedKeys”状态。但是 slice 中的状态正在被新值覆盖,而旧值正在从状态中消失。

function DragDrop() {
  const dispatch = useDispatch();
  const files = useSelector((state) => {
    return state.file.uplaodedFiles;
  });
  const encryptedKeys = useSelector((state) => {
    return state.file.encryptedKeys;
  });
  const [createEncryptionKey, results] = useCreateEncryptionKeyMutation();

  const getKeys = async () => {
    try {
      const data = await createEncryptionKey().unwrap();
      if (data) {
        dispatch(setEncryptedKeys([...encryptedKeys, data]));
      }
    } catch (err) {
      console.log(err);
    }
  };

  const handleChange = (file) => {
    let arr = [];
    for (let i = 0; i < file.length; i++) {
      getKeys();
      const data = {
        file: file[i],
      };
      arr.push(data);
    }
    dispatch(setUplaodedFiles([...files, ...arr]));
  };

如果我上传 3 个文件,只有一个会处于“encryptedKeys”状态,但实际上应该有 3 个文件。

reactjs react-redux state slice rtk-query
1个回答
0
投票

您似乎遇到了一个问题,即当您期望所有三个文件都存在时,只有一个加密密钥存储在“加密密钥”状态中。该问题源于循环内 getKeys 函数的异步性质。由于 getKeys 是一个异步函数,因此当收到响应并调用调度来更新状态时,循环已经继续到下一次迭代。这会导致只有一个键被添加到状态中。

© www.soinside.com 2019 - 2024. All rights reserved.