reactjs - 如何在执行 render() 之前从 reducer 获取 prop 值?
问题描述
我使用了 redux-thunk 中间件,并且仅在执行渲染后才从 props 接收值。在调用渲染之前,如何在道具中设置“内容”的值?
UNSAFE_componentWillMount() {
this.getAllArticle();
}
getAllArticle = () => {
this.props.onGetAllArticle(); `
}
render() {
{this.props.contents ? this.props.contents.map((obj, index) => (
<tr key={index}>
<td> {obj.id} </td>
<td> {obj.title}</td>
<td> {obj.context}</td>
</tr>
)) : 'No Data'}}
function mapStateToProps(state) {
return {
contents: state.all
}
}
function mapDispatchToProps(dispatch) {
return {
onGetAllArticle: () =>dispatch(actionCreator.onGetAllArticle())
}
}
export default connect(mapStateToProps, mapDispatchToProps)(All);
解决方案
由于您触发了调度调用UNSAFE_componentWillMount
(我不推荐,因为它的名称暗示它是不安全的并且将被弃用),您收到的响应将仅在初始渲染后可用。
解决方案是在获取数据时向用户显示加载状态,因为您不会在初始渲染时获得数据。为此,您的减速器中有一个加载状态,该状态最初设置为 true
render() {
{this.props.contents ? this.props.contents.map((obj, index) => (
<tr key={index}>
<td> {obj.id} </td>
<td> {obj.title}</td>
<td> {obj.context}</td>
</tr>
)) : this.props.isLoading? 'Loading...': 'No Data'
}
}
function mapStateToProps(state) {
return {
contents: state.all,
isLoading: state.isLoading
}
}
function mapDispatchToProps(dispatch) {
return {
onGetAllArticle: () =>dispatch(actionCreator.onGetAllArticle())
}
}
推荐阅读
- android - 使用 RecyclerView 和数据库进行双重数据维护
- java - 如何使用 DeltaSpike 和 Weld 设置 SparkJava CDI
- laravel - Laravel,多个模型之间的多对多关系
- laravel - Laravel:反向 WHERE NOT IN - 排除任何具有 id=XXX 子级的父表
- sharepoint - 如何防止 Sharepoint 添加新列表项限制超过 5 个,而不是查看项目
- c++ - strcmp 错误 'WCHAR [260]' 到 'const char *'
- jquery - 无法在演示中集成 slick-carousel
- java - 检查列表中对象的所有值是否唯一
- javascript - 如何修复无法正常工作的 ReactJS 过滤搜索
- java - androidx.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:228) 处的 agment.onCreatePreferences