реагировать на нативную редукционную отправку за пределы компонента, не вызывая componentWillReceiveProps - PullRequest
0 голосов
/ 09 июня 2018

У меня есть эта отправка вне реагирующего компонента 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никогда не вызывается, как мне нужно сделать, чтобы правильно получать реквизиты?

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

1 Ответ

0 голосов
/ 10 июня 2018

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

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
};
...