【发布时间】:2017-08-27 18:18:04
【问题描述】:
当用户点击一个链接时,React Router 会显示一个组件。该组件将显示的数据来自端点,所以我想知道最佳做法是什么。
我创建了一个名为fetchData 的函数,它使用fetch 在端点中执行GET,然后返回一个promise。一旦这个承诺得到解决,我想调度一个 Redux 操作来更新状态。
我设法用redux-thunk 做到了这一点,但我想在不添加更多库的情况下实现它。
我正在尝试遵循“容器/展示”的理念,并且在 React 中使用无状态功能组件。
总的来说,这就是我正在做的事情:
index.js
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
)
app.js
const App = () => (
<div>
<BrowserRouter>
<div>
<Header />
<Switch>
<Route exact path="/" component={Main} />
<Route exact path="/data-list" component={DataListContainer} />
</Switch>
</div>
</BrowserRouter>
</div>
)
dataListContainer.js
const mapStateToProps = (state) => {
return { data: state.data }
}
const mapDispatchToProps = (dispatch) => {
return { }
}
const DataListContainer = connect(
mapStateToProps,
mapDispatchToProps
)(DataList)
dataList.js
const DataList = (props) => {
const rows = props.data.map(data => {
return <Data data={data} />
})
return (
<div>
{rows}
</div>
)
}
Data 组件只是显示数据。我想知道应该在哪里添加对函数fetchData 的调用以及应该在哪里解决返回的承诺。我想我需要在 promise 解决后调度一个动作,但不确定在哪里执行此操作的最佳位置。
其他问题是:我只想获取一次数据,我的意思是,只有当用户单击/data-list 链接时。如果它返回主页然后再次转到data-list,我不想再次调用端点。 React Route 实现中是否隐藏了 call once 功能?
【问题讨论】:
标签: javascript reactjs redux react-router react-redux