Я изучаю RN с Udemy: Полный курс React Native и Redux Стивена Гридера , и я создаю управляющее приложение с Firebase.
У меня есть функция подключения отreact-redux
библиотека и mapStateToProps()
, поэтому каждый раз, когда у меня происходят изменения в моих состояниях, я получаю их как реквизиты в своем компоненте.
Я создал действие для извлечения данных из базы данных Firebase и собираюсьчтобы вызвать его в componentWillMount()
, но так как выборка данных является асинхронной задачей, я должен создать свой источник данных в componentWillReceiveProps()
.
Но инструктор сказал, что я должен вызвать свой createDataSource()
в обоих componentWillMount()
и componentWillReceiveProps()
.
Я не могу понять, почему !!если у меня есть какие-либо изменения в штатах (это список моих сотрудников), я получу их как реквизиты, поэтому я думаю, что достаточно позвонить только по номеру createDataSource()
componentWillReceiveProps()
.
Может кто-нибудь заявить, чтоМне, пожалуйста?Есть ли какой-то особый случай, который я забываю обработать?
ОБНОВЛЕНИЕ
EmployeeActions.js:
export const employeesFetch = () => {
const { currentUser } = firebase.auth();
return dispatch => {
firebase
.database()
.ref(`/users/${currentUser.uid}/employees`)
.on("value", snapshot => {
dispatch({ type: EMPLOYEES_FETCH_SUCCESS, payload: snapshot.val() });
});
};
};
EmployeeList.js:
componentWillMount() {
this.props.employeesFetch();
this.createDataSource(this.props);
}
componentWillReceiveProps(nextProps) {
this.createDataSource(nextProps);
}
createDataSource({ employees }) {
const ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});
this.dataSource = ds.cloneWithRows(employees);
}
, поэтому я использую ListView
, чтобы показать своих избранных сотрудников из Firebase!Будут ли у меня проблемы, если я просто использую createDataSource()
в componentWillReceiveProps()
?