A-Level. React. Hooks.

React LogoHooks

Теми

  1. State
  2. Hooks

State. Часткове злиття.

Коли ми викликаємо setState(), React обʼєдгає новий стан із поточним.

            state = {
              firstname: '',
              lastname: '',
            }
            ...
            this.setState({ lastname: 'Petia' })
        

State. Підняття стану.

Для будь-яких змінюваних даних у React-додатку має бути одне "джерело істини".

Тобто, якщо декілька компонентів повинні відображати одні й ті самі змінювані дані, у такому випадку піднімаємо спільний стан до найближчого спільного батьківського компонента.

            class App extends Component {
              state = { firstName: '', lastName: '' };
             
              onChange = (e) => { ... };
             
              render() {
                const { firstName, lastName } = this.state;
                return (
                  <Fragment>
                    <Form firstName={firstName} lastName={lastName} onChange={this.onChange} />
                    <Greeting firstName={firstName} lastName={lastName} />
                    </Fragment>
                 )
              }
            }
        

Hooks (Хуки)

Хуки — дозволяють використовувати стан та інші можливості React без написання класів (у функціональних компонентах).

Правила:

Hooks

Найпопулярніші:

useState

Надає нашому функціональному компоненту внутрішній стан. React зберігатиме цей стан між рендерами.

const [state, setState] = useState(initialState);

useState

            function Counter() {
              const [count, setCount] = useState(0);
              return (
                <div>
                  <p>Ви клікнули {count} разів</p>
                  <button onClick={() => setCount(count + 1)}>Тисни</button>
                </div>
              );
            }
        

useEffect

Хук useEffect являє собою сукупність методів. componentDidMount, componentDidUpdate та componentWillUnmount.

useEffect

useEffect.

            const Counter = () => {
              const [count, setCount] = useState(0);
             
              useEffect(() => {
                document.title = `click: ${count}`;
              })
             
              return (
                <button onClick={() => setCount(count + 1)}>Click</button>
              );
            };
        

Tasks

Переробити всі завдання із минулого заняття на Хуки.

Links