คำถามที่สำคัญที่สุดคือ: คุณหมายถึงอะไรโดย 'โหลด'? หากคุณกำลังพูดถึงองค์ประกอบทางกายภาพที่ติดตั้งอยู่คำตอบแรก ๆ ที่นี่ยอดเยี่ยม อย่างไรก็ตามหากสิ่งแรกที่แอปของคุณทำการตรวจสอบความถูกต้องสิ่งที่คุณกำลังโหลดจริง ๆ คือข้อมูลจากแบ็กเอนด์ว่าผู้ใช้ผ่านคุกกี้ที่ติดป้ายชื่อพวกเขาเป็นผู้ใช้ที่ได้รับอนุญาตหรือไม่ได้รับอนุญาต
สิ่งนี้มีพื้นฐานมาจาก redux แต่คุณสามารถเปลี่ยนเป็นรูปแบบ state react ล้วนๆได้อย่างง่ายดาย
ผู้สร้างแอ็คชั่น:
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 เป็นความจริงเราจะเห็นหน้าจอโหลดอยู่เสมอ บน componentDidMount เราเรียกใช้ฟังก์ชัน getTodos ซึ่งเป็นผู้สร้างแอ็คชั่นที่เปลี่ยน state.loading เท็จเมื่อเราได้รับการตอบกลับ (ซึ่งอาจเป็นข้อผิดพลาด) องค์ประกอบของเราอัปเดตแสดงการโทรอีกครั้งและในเวลานี้ไม่มีหน้าจอโหลดเนื่องจากคำสั่ง if