Я работаю над приложением 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
.