React 传递了数组,行为很奇怪

React passed up array acting weird

提问人:tilllius 提问时间:11/15/2023 最后编辑:tilllius 更新时间:11/15/2023 访问量:38

问:

我在我的 React 项目中遇到了一个奇怪的问题,我似乎无法弄清楚。

function App() {
  const [files, setFiles] = useState([]);
  const [selected, setSelected] = useState(null);


  const handleFileAdd = function(newFiles){
    console.log(newFiles);
    console.log([...files, ...newFiles])
    setFiles([...files, ...newFiles]);
  };

  return (
    <div className="App">
        <div className="main-child"><FileHandler addFiles = {(x) => {handleFileAdd(x)}} setFiles={setFiles} files={files} setSelected={setSelected} selected={selected}/></div>
    </div>
  );
}

通过另一个组件,addFiles 函数得到,然后进一步传递给 FileDrop 组件。

    function FileDrop(props){

    const onDropFunction = function(files){
        var temp = [];

        files.forEach( (file) => {
            var reader= new FileReader();

            reader.onload = () => {
                const binaryStr = new TextDecoder().decode(reader.result);
                temp.push({"name": file.name, "format": file.type, "data": binaryStr});
                };

            reader.readAsArrayBuffer(file);
        });
        props.addFile(temp);
        
    };

    return(
        <Dropzone onDrop={onDropFunction} multiple={true}>
            {({getRootProps, getInputProps , isDragActive}) => (
                <section>
                <div id='drop-off-area' {...getRootProps()}>
                    <input {...getInputProps()} />
                    {isDragActive ? 
                    <p>Drop your file here :)</p> :
                    <p>Drag 'n' drop some files here, or click to select files</p>}
                    <div id='drop-off-area-files'>
                    </div>
                </div>
                </section>
            )}
        </Dropzone>
    );
}

当我打印出“newFiles”(一个对象数组)时,它会打印出我传递的普通数组。 当我打印出下面的联接数组时,它突然是空的。 我只是想不通,为什么会这样.. 提前致谢

我已经尝试了连接和复制数组的不同方法,但没有任何帮助。 我更新 files-array 的其他函数正在按预期工作。

JavaScript ReactJS 数组

评论

0赞 David 11/15/2023
你能做一个更完整的最小可重现的例子来演示这种行为吗?你所指的特定行为听起来确实很奇怪,可能是调试中的错误。
1赞 Rango 11/15/2023
看起来您在加载文件之前调用了 props.addFile。 是异步方法,这意味着您应该在回调中处理加载的文件reader.readAsArrayBufferreader.onload
0赞 Rango 11/15/2023
考虑检查这个问题:stackoverflow.com/questions/50485929/......

答: 暂无答案