Я работал с React & Redux некоторое время, когда коллега по работе увидел какой-то код, который я написал, и прокомментировал его.
SomeComponent.js
class SomeComponent extends Component {
async componentDidMount() {
await this.props.fetchPosts();
if (this.props.posts.length < 1)
return navigateTo( /* someOtherPlace */);
}
render() {
return (
<>
{this.props.posts.map(
(postData, i) => <Post key={i} {...postData}/>
)}
</>
);
}
}
const mapStateToProps = ({ posts }) => ({
posts: posts.list,
isFetching: posts.isFetching
});
export default connect(mapStateToProps, { fetchPosts })(SomeComponent);
actions / posts.js
export const fetchPosts = () => async dispatch => {
dispatch(requestPosts());
let posts;
try {
posts = (await api.get('/posts')).data
} catch (e) {
posts = e;
}
dispatch(receivePosts(posts));
}
Он в основном сказал, что я не должен ждать действия fetchPosts()
, вместо этого я должен просто позвонитьэто, и пусть он обновляет реквизиты, повторно визуализирует и выполняет условную навигацию в componentDidUpdate
, что, когда он сказал это, это имело для меня смысл.
Но теперь я продолжаю спрашивать себя, что я делална самом деле это было плохо, потенциально глючно или просто плохая практика, которая добавляла больше сложности.
Он не упомянул причины, по которым это было неправильно, за исключением того, что это не был способ реагирования.
РЕДАКТИРОВАТЬ: Добавлен фрагмент кода, показывающий, что подход действительно работает и не выполняет ошибочное чтение.