Метод функциональных компонентов без сохранения состояния никогда не получает свежие данные из хранилища Redux, но другие - PullRequest
0 голосов
/ 24 августа 2018

У меня возникли проблемы.У меня есть довольно распространенный функциональный компонент, подключенный к Redux через mapStateToProps:

    const TableWrapper = ({ studentsSelection }) => {

  const onComponentStateChanged = params =>
    params.api.forEachNode(node =>
      studentsSelection.selectedStudents.findIndex(student =>
        student.number === node.data.number) >= 0 &&
      node.setSelected(true)
    );

  const gridOptions = getGridOptions(onComponentStateChanged(), onSelection);

  return (
    <BootStrapTableWrapper>
      <Table gridOptions={gridOptions} />
    </BootStrapTableWrapper>
  );
};
TableWrapper.propTypes = {
  studentsSelection: PropTypes.shape({
    selectedStudents: PropTypes.array
  })
};

const mapStateToProps = state => ({
  studentsSelection: state.gpCreationWizard.studentsSelection
});

export default connect(mapStateToProps)(TableWrapper);

Где getGridOption относится к этому:

const getStudentsSelectionGridOptions = (onComponentStateChanged, updateStudentsSelectionSelectionAction) => ({
    ...studentsSelectionGridOptions,
    onComponentStateChanged(props) {
        onComponentStateChanged(props);
    },
    onRowSelected({node}) {
        updateStudentsSelectionSelectionAction(node);
    },
});

export default getStudentsSelectionGridOptions;

И полученные gridOptions используются для таблицы Ag-Grid.

Итак, позвольте мне объяснить бизнес-функцию: я использую таблицу Ag-Grid, и когда пользователь выбирает некоторых учеников, они добавляются в хранилище Redux.Затем я использую onComponentStateChanged, чтобы сохранить выбор на нумерации страниц.Так что, если пользователь изменил страницу, и старые данные будут заменены новыми, я хочу сохранить выбор, когда он вернется обратно.Но проблема в том, что onComponentStateChanged всегда ссылается на один и тот же studentsSelection.selectedStudents (но другие методы рендеринга и получения новых данных).Так что это, вероятно, что-то о js scopes.Пожалуйста, что я должен сделать, чтобы эта функция использовала новые данные, а не старые.Я пытался обернуть это в функцию пыльника, но это не имело никакого эффекта.Забавный факт, что это прекрасно работает для компонента класса и ссылается this.props.Если я объяснил это не очень ясно, пожалуйста, спросите о более подробной информации.

1 Ответ

0 голосов
/ 24 августа 2018

не уверен, что делает getGridOptions ... но я думаю, что проблема в том, что вы вызываете метод, а не передаете метод, поэтому измените:

const gridOptions = getGridOptions(onComponentStateChanged(), onSelection);

до:

const gridOptions = getGridOptions(onComponentStateChanged, onSelection);

поэтому onComponentStateChanged отправляется как метод, а не как результат его вызова

...