【发布时间】:2018-10-09 07:56:34
【问题描述】:
我是个新手,我正在为 REST-API 开发前端。
我的 REST-API 前端组织在 5 个站点(组件)中,这些站点(组件)使用 react-router-dom 路由。
每次我进入站点时,ComponentDidLoad 都会调度一个动作,该动作又会调用我的 reducer 中的 API。
export function getData(pURL, ...pParams){
return (dispatch) => {
axios.get(pURL, {pParams})
.then(result => {
dispatch(getDataSuccess(result.data))
})
.catch(error => {
dispatch(getDataFailure(error))
})
}
}
我的一个主要网站如下所示
class Overview extends Component {
componentDidMount(){
this.props.getData(MyURLHere);
}
render(){
return(
<div>
{this.props.hasError ? "Error while pulling data from server " : ""}
{/* isLoading comes from Store. true = API-Call in Progress */}
{this.props.isLoading ? "Loading Data from server" : this.buildTable()}
</div>
)
}
}
let mapStateToProps = state => {
hasError: state.api.hasError,
isLoading: state.api.isLoading,
companies: state.api.fetched
}
let mapDispatchToProps = {
//getData()
}
export default connect(mapStateToProps, mapDispatchToProps)(Overview);
state.api.fetched 是我的存储变量,我存储来自每个 API-Call 的数据。
this.buildTable() 只是映射数据并创建一个简单的 HTML 表格
我的问题是我在initialState 中将存储状态变量isLoading 设置为true。
但是当我移动到另一个站点然后回到这个站点时,它会自动从state.api.fetched 获取数据并尝试使用它来this.buildTable(),因为isLoading 不是true。以“不是函数”错误结束,因为其中仍然有从另一个站点获取的旧数据。
我的解决方案是在离开将我的商店重置为 initialState 的组件(站点)时始终调用一个函数
const initialStateAPI = {
isLoading: true
}
或直接将isLoading 设置为true,以避免我的网站尝试使用旧获取的数据。
有没有办法做到这一点? 我希望我提供了足够的信息,如果没有,请告诉我。
【问题讨论】:
标签: reactjs react-redux