У меня есть эта рассылка вне компонента реакции 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» мой магазин отлично работает между компонентами, терпит неудачу только тогда, когда я пытаюсь отправить за пределы реагирующего компонента.
Отправка находится в функции addOrder внутри myActions.js store.dispatch (setOrder (order)); // отправляем новый объект заказа, мой магазин обновляется, если я распечатаю свойства после вызова функции x, я могу увидеть обновленное состояние. но метод componentWillReceiveProps не вызывается.





На самом деле вы не клонируете объект (только элемент), поэтому вы изменяете состояние изменчивым способом, поэтому 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
};
Вы уверены, что ваше действие действительно выполняется? Прикрепленный код просто создает объект действия, но никогда не вызывает на нем
dispatch(например,this.props.dispatch(addToOrder(....)), а не простоaddToOrder).