ユーザーがリンクをクリックすると、React Routerにコンポーネントが表示されます。このコンポーネントが表示するデータはエンドポイントから来たものですから、ベストプラクティスが何であるか不思議です。React Router、Redux、およびasync 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実装で隠されたコール機能はありますか?