我有一個組件使用componentWillMount來通過redux進行API調用以獲取數據並更新狀態。React | Redux | Thunk - 應該如何從組件內載入數據?
在調用此方法之前,我需要訪問數據庫並獲取一個屬性,我將決定是否應該從第一段開始進行數據檢索。
我在想什麼(使用承諾)做的 -
- 獲取的屬性(從第2段)
- 然後,如果需要的數據,調度正常流動(第1款)。
- 如果數據不需要,繼續。
我的問題是在哪裏它應該在你的意見。
一方面,它感覺像一個巨大的矯枉過正,通過商店。另一方面,任何機會我會遇到副作用問題。另外,我可以在組件或動作創建器中實現邏輯。你認爲最好的是什麼?
附加信息: 1.我正在使用redux-thunk。改變傳奇是不可能的。 2.我正在檢查的屬性是1個reducer,而需要提取的數據是在另一個reducer(不知道,可能會對某些解決方案有問題)。
選項1:
import {getData} from '....../dataActions';
import {getToken} from '......../userActions';
const MegaComponent extends React.Component {
componentWillMount() {
getToken(uid)
.then(shouldUpdate => {
if (shouldUpdate) {
getData(uid);
} else {
console.log('no need to get data');
}
})
}
}
funciton mapStateToProps(state, ownProps) {
return {
user: state.user
}
}
function mapDispatchToProps(dispatch) {
return {
getToken: (uid) => dispatch(getToken(uid)),
getData: (uid) => dispatch(getData(uid))
};
}
export default connect(mapStateToProps, mapDispatchToProps)(MegaComponent);
選項2(我認爲應該做的事)
export function getToken(uid) {
return dispatch => {
return api.getToken(uid)
.then(token => {
if (token === 'what it should') {
return {type: 'NO_DATA_CHANGE_NEEDED', action: null};
} else {
// the action that handle getting data is in a different action creator.
// I either import it here and call it, or there's a better way.
}
})
}
}
UPDATE
這可能派上用場的未來visiotrs - getting state inside an action creator
有趣的方法!可能是一個解決方案。 我會嘗試在問題中添加一些代碼。 – alexunder
嗨夥計,我已經添加了一些代碼,認爲這可能是有益的 – alexunder
是啊,我看你派遣的getData()如果需要的話,但你如何找回數據,您的組件?數據保存在商店中?但是你不會把這個狀態映射到道具上。所以,即使您更改了數據,您如何將更新的數據提供給您的組件? – larrydahooster