最も重要な質問は、「ロード」とはどういう意味ですか?マウントされている物理要素について話している場合、ここでの最初の答えのいくつかは素晴らしいです。ただし、アプリが最初に行うのが認証のチェックである場合、実際にロードしているのは、ユーザーが承認済みユーザーまたは未承認ユーザーにラベルを付ける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を偽装するアクション作成者です。コンポーネントが更新され、renderが再度呼び出されます。今回は、ifステートメントのため、ロード画面はありません。