@kfedor

Как правильно использовать dispatch в useEffect?

Всем привет.
Пытаюсь установить state компонентов в useEffect, используя React Redux метод dispatch().
Мне нужно, чтобы state canvas'а передавался в dispatch с setTool'ом.

import React, { useRef, useEffect } from 'react';
import './Board.scss';
import { useSelector, useDispatch } from 'react-redux';
import { setCanvas } from '../../store/canvasSlice';
import { setTool } from '../../store/toolSlice';
import Brush from '../../tools/Brush';

export const Board = () => {
  const canvasRef = useRef();
  const canvas = useSelector((state) => state.canvas.canvas);
  const tool = useSelector((state) => state.tool);
  const dispatch = useDispatch();
  useEffect(() => {
    dispatch(setCanvas(canvasRef.current));
    dispatch(setTool(new Brush(canvas)));
    console.log('canvas from board', canvas);
    console.log('tool', tool);
  }, [dispatch]);

  return <canvas ref={canvasRef} className='board' width={1920} height={1080}></canvas>;
};


При первом обновлении все значения console.log выводят null - стандартные значения state'а.

6411cdf30bfc6506821486.jpeg

Если пересохранить измененный код (например, убрать один console.log), то state выводится уже измененный.
Как починить?
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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