Reactjs 未在Recompose WithHandler中更新上下文值
我有ActiveModalData的上下文,它有activeIDReactjs 未在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
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>
))
当IcloseModal
时,它变为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)
)},
)