Хук createContext не работает для компонентов реакции внутри JSP
Я визуализирую свой компонент реакции внутри существующей страницы JSP, используя
ReactDOM.render(
React.createElement(MyReactComponents.myReactComponent, {
props
}),
document.querySelector("#id")
);
а компонент реакции следующий:
import MyStore from "./MyStore";
const MyReactComponent: React.FC<any> = (props: any) => {
const store = useContext(MyStore);
store.myFunction();
---code---
}
и MyStore выглядит следующим образом:
export class MyStore{
---Code---
}
export default createContext(new MyStore());
И еще одна важная вещь, на которую следует обратить внимание, заключается в том, что когда я пытаюсь визуализировать этот компонент реакции поверх другого существующего компонента реакции, я не получаю никаких ошибок, и все работает нормально.
Может кто-нибудь объяснить мне, что может вызвать проблему?
1 ответ
Я не уверен, но, возможно, вы неправильно используете useContext
крючок?
Всякий раз, когда вы используете его внутри компонента Child
, то хотя бы один из его родительских компонентов должен вызывать <Context>.Provider
, так что он инициализируется вниз по дереву.
В вашем примере вы визуализируете MyReactComponent
с помощью ReactDOM.render
: из-за этого, я полагаю MyReactComponent
это первый компонент в вашем дереве. Если это так, когда вы используетеuseContext
внутри он не может найти MyStore
контекст.
Так что, наверное, вам просто нужно завернуть MyReactComponent
с поставщиком контекста.
export class MyStore { ... }
export const MyStoreContext = createContext(new MyStore());
---
ReactDOM.render(
<MyStoreContext.Provider>
<MyReactComponent {...props />
</MyStoreContext.Provider>
, document.querySelector("#id"));
А потом внутри MyReactComponent
, вы можете использовать const store = useContext(MyStoreContext);
.