Вызов неустановленной функции с использованием componentDidMount или из другого файла
Я пытаюсь создать контекст для хранения всей информации, необходимой для моего приложения, приведенный ниже код работает, но у меня есть ограничения, это Api.js
где я хочу разместить всю логику и API запросы / ответы.
import { Provider, Subscribe, Container } from "unstated";
import fire from "./config/Fire";
class APIContainer extends Container {
constructor(props = {}) {
super();
this.state = {
loggedIn: false,
loading: null,
};
}
async auth() {
fire.auth().onAuthStateChanged((user) => {
if (user) {
this.setState({ loggedIn: true, loading: false });
}
else {
this.setState({ loggedIn: false, loading: false });
}
});
}
}
const Api = {
Instance: new APIContainer(),
Provider,
Subscribe
};
export default Api;
Это App.js
<Routes />
базовый реагирующий маршрутизатор с несколькими путями
<Api.Provider inject={[Api.Instance]}>
<Routes />
</Api.Provider>
На компонентах я могу использовать контекст, но только в методе рендеринга следующим образом:
<Api.Subscribe to={[Api.Instance]}>
{api => (
<p>String(api.state.loggedIn)</p>
<button onClick={() => api.auth()}>run</button>
)}
</Api.Subscribe>
Теперь моя цель - либо реализовать componentDidMount
в APIContainer
или получить доступ к функции на любом компоненте, я пытался с подпорками не работал!
componentDidMount = () => {
this.props.api.auth();
}
пожалуйста, порекомендуйте
1 ответ
Как ваш код, api.auth()
просто действителен внутри подписки, он недействителен в componentDidMount
,
Если вы хотите авто-авторизацию на componentDidMount
, вы должны сделать дочерний компонент и передать auth()
к этому.
Я сделал пример для вас. Вы можете видеть, что вы хотите на консоли.