Итак, я новичок во всем, что касается реакции и редукции, и после нескольких речей и блогов я пытаюсь создать приложение реагировать на редукцию.Я нажимаю API для получения некоторых данных.
редуктор выглядит так:
const initialState ={
rest: null,
rests: null,
loading: false
}
export default function(state = initialState, action){
switch (action.type){
case REST_LOADING:
return{
...state,
loading: true
}
case GET_REST:
return {
...state,
rest: action.payload,
loading: false
}
Действие:
export const getCurrentRest = name =>
dispatch(setRestLoading());
axios.get(`/api/restaurant/rest/${name}`)
.then(res =>
dispatch({
type: GET_REST,
payload: res.data
})
)
.catch(err =>
dispatch({
type: GET_REST,
payload: {}
})
);
}
Теперь я вызываю это действие настраница примерно такая:
class CafeMenu extends Component {
name = this.props.match.params.id;
constructor(props) {
super(props);
}
componentDidMount() {
this.props.getCurrentRest(this.name);
}
в части рендеринга, я произвел некоторую деструктуризацию.первоначально:
const {rest, loading} = this.props.rest;
позже я изменил его на
const {rest} = this.porps.rest;
, теперь я могу видеть данные в журналах консоли и изменения состояния в расширении redux devtools, но когда я пытаюсь получить к нему доступ черезrest.name или this.rest.rest.name без деструктуризации выдает typeError, скажем, не может прочитать свойство 'rest' из undefined.Я попробовал все, но не мог понять, что я сделал неправильно и как решить эту проблему дальше, и застрял в этом.
Первоначально я также сделал что-то вроде:
if(rest === undefined || null){
<h1> loading</h1>
}
else{
reder...
и консоль.журнал this.props.rest is
{rest: Array(1), rests:null, loading: false}
loading: false
rest: Array(1)
0:
email: "something@abc.com"
loc: {long: "23.34", lat: "43"}
loc_name: "abc"
menu: []
name: "xyz"
...