@zlodiak

Как поднять стейт в родительский компонент?

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

Помогите пожалуйста это сделать. Проблема в том, что контейнерная компонента не представляет из себя ни объект, ни функцию. Следовательно я не могу в ней использовать хуки типа setState.

Page1.jsx:
import React, { useState } from 'react';

function Page1(props) {
  let textareaRef = React.createRef();
  
  const [state, setState] = useState({
    presentText: '',
  });

  function textareaSet() {
    props.setAppTextCreator(textareaRef.current.value);
    textareaRef.current.value = '';
  }

  function textareaChange() {
    setState({...state, presentText: textareaRef.current.value})
  }

  return (
    <div>
        <textarea 
          ref={ textareaRef }
          onChange={ textareaChange }>
        </textarea>
        <button onClick={ textareaSet }>send</button>
        <div>present: { state.presentText }</div>
        <div>memorized: { props.text }</div>
    </div>
  );
}

export default Page1;


Page1smart.jsx:
import {connect} from "react-redux";
import { setAppTextCreator } from '../../redux/appReducer';

import Page1 from './Page1';

const mapStateToProps = state => {
  return {
    text: state.appReducer.appText,
    presentText: state.presentText
  }
}

export default connect(mapStateToProps, { setAppTextCreator })(Page1);
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 2
@karminski
Senior React.JS Developer
Насколько я помню, поднимать стейт в реакте нельзя. Можно задать стейт выше вашего родительского компонента и спускать его ниже с помощью контекста.
Ответ написан
@davidnum95
Это неправильный подход

Это кто такое сказал?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы