Как поместить в state компонента данные из reducer

220
17 июня 2022, 00:30

Я получаю данные из JSON-файла в файле actions.js и устанавливаю их в reducer sections:

dispatch(fetchSectionsSuccess({ sections: sections }));

Также у меня есть компонент Sections.js, и я бы хотел помимо хранения массива sections в reducer хранить их в state компонента Sections, чтобы в дальнейшем я мог менять всего лишь state компонента вместо отправки action, который будет изменять данные в reducer sections.

Я пытаюсь сделать это следующим образом в файле Sections.js:

const mapStateToProps = (state) => {
    const props = {
      sections: state.sections,
    }
    return props;
  };
class Sections extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            sections: this.props.sections
        }
    }
render () {
        const { sections, products } = this.props;
        console.log('Sections from props ', this.props.sections);
        console.log('Sections from state ', this.state);
}

Но в итоге понимаю, что данные не попадают в state:

Вопросов несколько:

  1. Это вообще считается нормальным хранить какие-то данные в state компонента, когда есть reducer? Или мне все-таки лучше хранить все в reducers.js?
  2. Если я все-таки хочу хранить эти данные в state компонента, как мне это сделать?
Answer 1
  1. В некоторых случаях нормально, например если вы меняете состояние в компоненте и у вас есть кнопки сохранить и отмена

  2. В вашем случае, скорее всего, конструктор отрабатывает раньше чем обновляются данные. добавьте метод

     componentDidUpdate(prevProps){
       if(this.props.sections!==prevProps.sections){
         this.setState({sections: this.props.sections});
       }
     }
    
READ ALSO
Универсальный шаблонизатор для файлов на js/ts

Универсальный шаблонизатор для файлов на js/ts

Стало напрягать создавать ручками много файлов и хотелось бы немного автоматизировать процессКаким инструментом можно создавать файлы...

187
Русификация Date-picker

Русификация Date-picker

Как сделать русификацию календаря?

243
Как создать элемент по клику в таблице?

Как создать элемент по клику в таблице?

Новичок в реакте, понимаю в теории, но не могу сделать это на практике, как можно добавить элемент по клику в таблицу с 3-мя полями по инпуту?

181
Как ускорить выполнение rest запросов?

Как ускорить выполнение rest запросов?

Имеется многоповторная отправка рест запроса, для отправки, допустим 4000 раз, требуется много времени, каким способом можно ускорить данный...

157