最も重要な質問は、「ロード」とは何を意味するかということです。マウントされている物理要素について話している場合、ここでの最初の回答のいくつかは素晴らしいものです。ただし、アプリが最初に認証のチェックを行う場合、実際にロードするのはバックエンドからのデータであり、ユーザーが承認済みユーザーまたは未承認ユーザーのラベルを付ける Cookie を渡したかどうかに関係ありません。
これは redux に基づいていますが、単純な反応状態モデルに簡単に変更できます。
アクションクリエーター:
export const getTodos = () => {
return async dispatch => {
let res;
try {
res = await axios.get('/todos/get');
dispatch({
type: AUTH,
auth: true
});
dispatch({
type: GET_TODOS,
todos: res.data.todos
});
} catch (e) {
} finally {
dispatch({
type: LOADING,
loading: false
});
}
};
};
最後の部分は、ユーザーが認証されているかどうかを意味し、応答を受信するとロード画面が消えます。
それをロードするコンポーネントは次のようになります。
class App extends Component {
renderLayout() {
const {
loading,
auth,
username,
error,
handleSidebarClick,
handleCloseModal
} = this.props;
if (loading) {
return <Loading />;
}
return (
...
);
}
...
componentDidMount() {
this.props.getTodos();
}
...
render() {
return this.renderLayout();
}
}
state.loading が true の場合、常に読み込み画面が表示されます。componentDidMount で、getTodos 関数を呼び出します。これは、応答を受け取ったときに state.loading を false にするアクション クリエーターです (これはエラーになる可能性があります)。コンポーネントが更新され、render が再度呼び出されますが、今回は if ステートメントのために読み込み画面はありません。