Javascript 我的道具不是';t在调度操作后更新,但状态已更新

Javascript 我的道具不是';t在调度操作后更新,但状态已更新,javascript,reactjs,react-redux,react-router,react-props,Javascript,Reactjs,React Redux,React Router,React Props,我有一个化身组件: const Avatar = (props) => { let newInput = React.createRef(); const upload = async () => { let file = newInput.current.files await props.changeFile(file) console.log('PROPS:', props.file) console.log('FILE:', file) }

我有一个化身组件:

const Avatar = (props) => {
let newInput = React.createRef();

const upload = async () => {
    let file = newInput.current.files
    await props.changeFile(file)
    console.log('PROPS:', props.file)
    console.log('FILE:', file)
}

return (
    <div className={mod.Avatar}>
        <form method="post" action="" encType="multipart/data">
            <label id={mod.l} htmlFor={mod.ava}><img src={ava} alt=''/></label>
            <input ref={newInput} type="file" id={mod.ava} name="ava" accept='image/*' onChange={upload} files={props.file}/><br />
        </form>
    </div>
)
这适用于文本,但当我使用文件输入时,它不是更新道具

我记录了它,可以看到我发送了新文件到州,但道具仍然是空的。 我的控制台日志

ACTION.FILE FileList {0: File, length: 1}l
NEW.FILE FileList {0: File, length: 1}
NEW STATE {posts: Array(4), textAreaValue: "aa", file: FileList}
PROPS: 
FILE: FileList {0: File, length: 1}

setState是异步的。。您登录同步matterI不知道这是否与问题有关,但不要在此处使用ref
onChange
将传入一个ChangeEvent参数。使用
event.target.files
检索该值。另外,@DennisVash有点正确。您正在记录的
道具是组件当前呈现的道具。如果要查看正在重新渲染的内容,请将日志移到
upload()
之外。
ACTION.FILE FileList {0: File, length: 1}l
NEW.FILE FileList {0: File, length: 1}
NEW STATE {posts: Array(4), textAreaValue: "aa", file: FileList}
PROPS: 
FILE: FileList {0: File, length: 1}