當用戶點擊一個鏈接時,React Router將顯示一個組件。該組件將顯示的數據來自終端,因此我想知道最佳做法是什麼。React路由器,Redux和異步API調用
我創建了一個名爲fetchData
的函數,它使用fetch
在端點中執行GET並返回一個承諾。一旦這個承諾解決了,我想派遣一個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
的調用,以及我應該在哪裏解決返回的承諾。我想我會需要在承諾解決後派遣一個行動,但不知道在哪裏做最好的地方。
其他問題是:我只想取數據一次,我的意思是,只有當用戶點擊/data-list
鏈接。如果它回到主頁面,然後再次轉到data-list
,我不想再次呼叫端點。 React Route實現中是否隱藏了一次隱藏的功能?