Я использую реагирование 16.2, и контекстный API работает, как и ожидалось, со следующей структурой.
const MyContext = createContext(null);
class Provider extends Component {
state = {
id: 'A value I set'
}
onUpdate = (e) => {
const { id } = e.dataset
this.setState({ id });
}
render() {
const { children } = this.props;
const { id } = this.state;
return(
<MyContext.Provider value={id}>
{children}
</MyContext.Provider>
)
}
}
function ConsumerHOC(WrappedComponent) {
function renderWrappedComponent(id) {
return <WrappedComponent id={id} />
}
return (
<MyContext.Consumer>
{renderWrappedComponent}
</MyContext.Consumer>
)
}
Когда я переключился на реакцию 16.8, этот код не работает. Всякий раз, когда onUpdate
вызывается, значение провайдера обновляется. Однако потребитель никогда не получает обновленное значение.
Если я записываю временную шкалу, я вижу, что внутренний метод реагирования propagateContextChange
вызывается, но после этого ничего не происходит.