Я новичок в реакции и редукции.Это может быть действительно простой вопрос, но я не могу найти лучшего выхода.Рассмотрим магазин, подобный этому
{
list:[
{uid:'35',...otherInfo},
{uid:'136',...otherInfo},
{uid:'199',...otherInfo},
]
}
BackEnd предоставляет API с именем getInfoByUid
.Отправьте uid
, затем получите otherInfo
действия
function addInfoByUid(uid){
// fetch back-end-api getInfoByUid(uid) then store the res into list
}
В React Component. Короче говоря, этот компонент просто получает uid
от родителя, а затем отображает otherInfo
class ComponentA extends React.Component{
render(){
const { list, presentUid } = this.props;
const item = list.find( x=>x.uid === presentUid );
return (
<div>{item.otherInfo}</div>
)
}
}
export default connect(
state => ({list:state.list}),
dispatch => ({addInfoByUid: (uid) => { dispatch(addInfoByUid(uid)) }}),
)(OrderEdit);
если список не содержит uid
I, то я получаю item
undefined и item.otherInfo
вызовет ошибку.
Я должен написать (!item) && (addInfoByUid(uid));
в componentA
.Я думаю, что из-за этого код станет хуже и сложнее поддерживать по следующей причине:
- Если у меня много Компонентов, я должен добавить один и тот же код в каждый Компонент.
- Iдумаю, что роль React - контролировать представление, а роль Redux - контролировать глобальные данные.Так что может быть намного лучше добавить этот код с моими редукторами или действиями.
Я думаю, что вызывать функцию до store.getState()
, например:
let _getState = deepCloneFunction(store.getState);
store.getState = ()=>{
//myCode
return _getState();
}
Однако я думаю, что это ужасное решение.Это приведет к ошибкам и может не решить асинхронную проблему.
Это должно быть распространенной проблемой.Любое предложение будет оценено.