// 1. product - будет пустой объект на старте
// 4. Получаете долгожданный product
// 5. И теперь хотите занести данные product в локальный стейт для дальнейшего редактирования?
const { product } = useSelector(state => state.products);
useEffect(() => {
// 2. Запрашиваете конкретный продукт по id
dispatch(fetchProduct(params.id));
// 3. Потом из thunk отправляете полученный продукт в редьюсер
}, [dispatch, params.id]); так же не работает, если я вас правильно понял
connect, mapDispatchToProps передаётся в виде объекта, то компонент уже не будет получать dispatch в свои пропсы.this.props.dispatch( this.props.booksLoaded(data));<form onSubmit={() => this.props.addMessage()}.e.preventDefault() - блокирует дефолтное поведение браузера и препятствует обновлению страницы.