как обрабатывать редукс реквизит в методах класса - PullRequest
0 голосов
/ 31 мая 2018

в моем приложении реакции я использую redux с redux-thunk. Прямо сейчас я получаю props в моем компоненте, но я не могу получить доступ к последней props в моемкомпонент methods
, поэтому я использовал componentWillReceiveProps, чтобы получить последний реквизит, используя nextprops, тогда я сохраняю nextprops в моем states, но проблема здесь в том, что setState это асинхронный
, поэтому, когда я выбираю определенное состояние в методах класса, получая значение prev state вместо значения nextprops, которое сохраняется в состоянии.но когда я утешаю тех state в методах класса с использованием setInterval получения последнего состояния значения, потому что setState значение теперь сохранено. ниже мой код

Действие создатель

export function pickup(latlng) {

    return function(dispatch) {
        dispatch({ type: PICKUP_STATE,payload:latlng });
    };

}

Редуктор

import {
    PICKUP_STATE,
    PICKUP_ADD,
    DROPOFF_STATE
} from '../actions/types';

    export default  (state={},action) => {
        const INITIAL_STATE = {
            pickup: '',
            pickupAdd:''
        };
        switch(action.type) {
            case PICKUP_STATE:
                console.log(action.payload)
                return {...state,pickup:action.payload};
            case PICKUP_ADD:
                return{...state,pickupAdd:action.payload};
            case DROPOFF_STATE:
                return {...state,dropoff:action.payload}
            default:
                return state;
        }
        //return state;
    }

компонент

import {
    connect
} from "react-redux";
import * as actions from "../actions"
class Map extends React.Component {
      componentWillReceiveProps(nextprops) {
             if (nextprops.pickupProps !== undefined) {
                 this.setState({
                     pick: nextprops.pickupProps
                 }, () => {
                     console.log(this.state.pick);

                 });
             }
       }
   isPickEmpty(emptyPickState) {
        this.props.pickup(emptyPickState);
    // setTimeout(() =>{ console.log('sdkjlfjlksd',this.state.pick) 
                        },3000);
        console.log(this.state.pick);
   }
}
const mapStateToProps = (state) => {
    // console.log(state.BookingData.pickup);
    return {
        pickupProps:state.BookingData.pickup,
        pickupAddProps: state.BookingData.pickupAdd
        }
}
export default connect(mapStateToProps,actions)(Map);

Корень приложения файл

import React        from "react";
import ReactDOM     from "react-dom";
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import "normalize.css/normalize.css"
import  "./styles/styles.scss";
import { Router, Route, IndexRoute, browserHistory } from 'react-router';
import reduxThunk from 'redux-thunk';
import { composeWithDevTools } from 'redux-devtools-extension';

import AppRouter from './routers/AppRouter';
import reducers from './reducers';
import {AUTH_USER} from "./actions/types";


const middleware = [
    reduxThunk,
];

const store = createStore(reducers, composeWithDevTools(
    applyMiddleware(...middleware),
// other store enhancers if any
));



const token = localStorage.getItem('token');
if(token){
    store.dispatch({type:AUTH_USER});
}

ReactDOM.render(
    <Provider store={store}>
        <AppRouter />
    </Provider>
    , document.getElementById('app'));

1 - как я могу получить доступ к новейшим props в моих методах класса
ИЛИ
2 - как я могу получить доступ к nextprops setState значению в моих методах класса
ИЛИ
3- любым лучшим способом , чтобы решитьэта ситуация

пожалуйста, помогите мне выбраться из этой ситуации, я застрял в 3 днях

1 Ответ

0 голосов
/ 31 мая 2018

Если я правильно понимаю, вам все равно нужно добавить карты для отправки, чтобы получить обновленные состояния из магазина.Создатель действия все еще должен быть вызван, а затем подключен к методу вашего класса, используя componentenetsDidMount

  componentDidMount() {
    this.props.fetchPickUp();
  }

const mapDispatch = dispatch => {
  return {
    fetchPickUp: () => dispatch(pickUp()),
  };
...