Как вызвать функцию перед store.getState () - PullRequest
0 голосов
/ 09 мая 2019

Я новичок в реакции и редукции.Это может быть действительно простой вопрос, но я не могу найти лучшего выхода.Рассмотрим магазин, подобный этому

{
  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.Я думаю, что из-за этого код станет хуже и сложнее поддерживать по следующей причине:

  1. Если у меня много Компонентов, я должен добавить один и тот же код в каждый Компонент.
  2. Iдумаю, что роль React - контролировать представление, а роль Redux - контролировать глобальные данные.Так что может быть намного лучше добавить этот код с моими редукторами или действиями.

Я думаю, что вызывать функцию до store.getState(), например:

let _getState = deepCloneFunction(store.getState);
store.getState = ()=>{
  //myCode
  return _getState();
}

Однако я думаю, что это ужасное решение.Это приведет к ошибкам и может не решить асинхронную проблему.

Это должно быть распространенной проблемой.Любое предложение будет оценено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...