0

アクションクリエーター

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);

app.jsルート ファイル

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'));

ここで私の問題は、マップ コンポーネントから isPickEmpty() を呼び出すときアクションクリエータthis.props.pickup(false)を 呼び出すときです (チェックインしてfalse のredux-devtoolsを表示することもできます) 。代わりにデフォルト値を表示して いますが、値を表示している内部の値を慰めているときに 間違って いる場合は修正してください行き詰まりました、だれか助けてください!更新 私はprblmが実際にどこにあるのかを知りましたcomponentWillReceiveProps(nextprops)false
setTimeout(() =>{console.log('sdkjlfjlksd',this.state.pick) }, 3000);false



componentWillReceivePropsは、非同期であるためピック状態の値を設定しているため、isPickEmpty関数で値をフェッチすると、前の値を取得しています。
どのようにsetStateを処理するか、または解決する方法はありますか

4

1 に答える 1