ReactRedux Я хочу обновить состояние, но всегда получаю «TypeError: Невозможно прочитать свойство 'адрес' из неопределенного» тот же код работает нормально, чтобы обновить другое состояние - PullRequest
0 голосов
/ 23 октября 2019

Я работаю над приложением CRUD, в котором мне нужно обновить свой адрес и PIN-код. Я пытаюсь обновить адрес с выбранными данными, используя Redux, но всегда получаю «TypeError: Невозможно прочитать свойство« адрес »неопределенного». Я не знаю, что не так с кодом, потому что тот же код обновляет поле City.

EditLocation.js

 const EditLocation = ({
  location: { location, loading },
  editLocation,
  getCurrentLocation,
  history,
  match
}) => {
  const [formData, setFormData] = useState({
    address: "",
    pinCode: ""
  });

  useEffect(() => {
    getCurrentLocation(match.params.id);

    setFormData({
      address: loading || !location.address ? "" : location.address, // i am getting error here code cant define location.adress
      pinCode: loading || !location.pinCode ? "" : location.pinCode
    });
  }, [loading, getCurrentLocation]);

  const onChangeHandler = e => {
    e.preventDefault();
    setFormData({ ...formData, [e.target.name]: e.target.value });
  };

  const onSubmitHandler = e => {
    e.preventDefault();
    editLocation(formData, history, match.params.id);
  };
   return (
<div>
</div>
)}
EditLocation.propTypes = {
  editLocation: PropTypes.func.isRequired,
  getCurrentLocation: PropTypes.func.isRequired,
  location: PropTypes.object.isRequired
};

const mapStateToProps = state => ({
  location: state.location
});

// alert(JSON.stringify(location.address));

export default connect(
  mapStateToProps,
  { editLocation, getCurrentLocation }
)(withRouter(EditLocation));

LocationAction.js

// Get current location
export const getCurrentLocation = id => async dispatch => {
  try {
    const res = await axios.get(`/api/location/${id}`);
    console.log(res.data.data.address);

    dispatch({
      type: types.GET_LOCATION,
      payload: res.data
    });
  } catch (err) {
    dispatch({
      type: types.LOCATION_ERROR,
      payload: { msg: err.response.statusText, status: err.response.status }
    });
  }
}; 

locationReducer.js

import * as types from "../../_actions/types";

const initialState = {
  location: null,
  locations: [],
  error: {},
  filtered: null,
  loading: true
};

export default function(state = initialState, action) {
  const { type, payload } = action;

  switch (type) {
    case types.GET_LOCATION:
      return {
        ...state,
        location: payload,
        loading: false
      };
default:
      return state;
  }
}

Однако, когда я использую Postman, он работает нормально, а также console.log(res.data.data.address); в locationAction.js показывает извлеченные данные, но когда я нажимаю кнопку обновления, он показывает ошибку TypeError. Я повторил тот же код, и он работает нормально, когда я хочу обновить поле City.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...