Реагировать на родную отправку redux, внешний компонент не запускает componentWillReceiveProps

У меня есть эта рассылка вне компонента реакции myActions.js:

import {SET_ORDER} from "./defaultActions";
import store from "../store";

const setOrder           = value => ({type: SET_ORDER,value});

export const addToOrder         = (item,type)=>{
    let order   = store.getState().order;//get object from store
    order[type].push(JSON.parse(JSON.stringify(item)));//clone new object to push on order array
    store.dispatch(setOrder(order));//dispatch new order object
};

В моем компоненте я получу реквизит с:

import {connect} from "react-redux";
import {addToOrder} from "myActions.js";
class Drinks extends Component{
   componentDidMount(){
     this.someAction();//trigger update order
   }
   someAction(){
     addToOrder({something},'type');
   }

   componentWillReceiveProps(props){
     //not works
     //expect props.order but never appears
   }
}

const stateToProps      = ({order}) => ({order});
const dispatchToProps   = null; //not dispatch here


const conn = connect(stateToProps,dispatchToProps);

export default conn(Drinks);

В магазине он обновлен, но componentWillReceiveProps никогда не вызывается, что мне делать, чтобы правильно получать реквизит?

Мои библиотеки redux: «react-redux»: «^ 5.0.7», «redux»: «^ 3.7.2», «redux-thunk»: «^ 2.3.0» мой магазин отлично работает между компонентами, терпит неудачу только тогда, когда я пытаюсь отправить за пределы реагирующего компонента.

Вы уверены, что ваше действие действительно выполняется? Прикрепленный код просто создает объект действия, но никогда не вызывает на нем dispatch (например, this.props.dispatch(addToOrder(....)), а не просто addToOrder).

user2213590 09.06.2018 23:11

Отправка находится в функции addOrder внутри myActions.js store.dispatch (setOrder (order)); // отправляем новый объект заказа, мой магазин обновляется, если я распечатаю свойства после вызова функции x, я могу увидеть обновленное состояние. но метод componentWillReceiveProps не вызывается.

Abel Olguin Chavez 09.06.2018 23:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
416
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле вы не клонируете объект (только элемент), поэтому вы изменяете состояние изменчивым способом, поэтому componentWillReceiveProps () никогда не вызывается. Переменная вашего заказа по-прежнему указывает на заказ в магазине redux. Попробуй это:

export const addToOrder = (item,type) => {
    let order   = {...store.getState().order}; //get cloned order object from store
    order[type].push(item); // push new object to cloned object
    store.dispatch(setOrder(order)); //dispatch new order object
};

Другие вопросы по теме