Reactjs 未在Recompose WithHandler中更新上下文值

Reactjs 未在Recompose WithHandler中更新上下文值,reactjs,recompose,Reactjs,Recompose,我有ActiveModalData的上下文,它有activeID export const withActiveModalData = (Component: React.ComponentType<any>) => React.forwardRef((props, ref) => ( <ModalContext.Consumer> {({ activeId, closeModal, data, promptData, openPrompt

我有ActiveModalData的上下文,它有activeID

export const withActiveModalData = (Component: React.ComponentType<any>) => React.forwardRef((props, ref) => (
    <ModalContext.Consumer>
      {({ activeId, closeModal, data, promptData, openPromptModal }) => (
        <Component {...props} {...data} {...promptData} closeModal={closeModal} ref={ref} activeId={activeId} openPromptModal={openPromptModal}/>
      )}
    </ModalContext.Consumer>
))
当I
closeModal
时,它变为null。但在我的HandleDrop函数中,它不会更新:

const enhance = compose(
 withActiveModalData,
 withHandlers({
 handleFileDrop: (props) => async (files: File[]) => {
      props.closeModal()
      console.log(props.activeId)
setTimeout(() => {
        console.log(props.activeId)
        console.log('3')
        //even here it is not update.
      }, 5000)
)},
 
)

我希望使其可复制的代码笔,但有许多组件涉及。它在componentDidUpdate中更新,但在handleFileDrop函数中不更新。如有必要,我会提供更多信息。谢谢。

首先请快速评论,假设一切正常,在
closeModal
之后,您将无法立即获取activeId。因为
setState
context
都至少需要一个渲染周期才能获得新值。您可以将
console.log
放入
ModalContext.Consumer
(一个渲染函数)中进行确认,而不是事件或调度。@windmaomao谢谢。我试试看。另外,谢谢你看这个问题。欢迎你。
const enhance = compose(
 withActiveModalData,
 withHandlers({
 handleFileDrop: (props) => async (files: File[]) => {
      props.closeModal()
      console.log(props.activeId)
setTimeout(() => {
        console.log(props.activeId)
        console.log('3')
        //even here it is not update.
      }, 5000)
)},
 
)