@acorn

Next.js redux axios store?

Привет!
Использую next.js с redux и axios. redux в качестве npm next-redux-wrapper. Axios для получения данных по url api
Есть вопрос, почему не получается принять новый state?
5aba4434dbc21772516049.png
вот картинка показывает, что есть данные у action, но next state не изменился. В чем может быть дело?
Actions
//sync
export const LOAD_SERIAL_SUCCESS = (serials)=>{
    console.log(`load action data serials  ${serials[2].show.name}`);
    return{
        type:'LOAD_SERIAL_SUCCESS',
        serials
    }
};

//add  batman async
export const loadSerial = ()=> {
    return (dispatch) => {
       return axios.get(root_url)
        .then(response=>{
            dispatch(LOAD_SERIAL_SUCCESS(response.data));
         })
         .catch(error => {
             throw(error)
         });
    }
};

Reducer
import LOAD_SERIAL_SUCCESS from "../actions/search-action"
const exampleInitialState={
    serials:[]
};

export const load_reducer = (state = exampleInitialState, action) => {
   console.log(`change + ${state}`);
   switch (action.type){
        case LOAD_SERIAL_SUCCESS:
            return {
                serials: action.serials,
                ...state
            };
                    default:
            return state;
    }
};

const logger = createLogger();
export const initStore = (initialState = exampleInitialState) => {
    return createStore(load_reducer, initialState, composeWithDevTools(applyMiddleware(thunk,logger)))
};

Index page
class Index extends React.Component {
    static async getInitialProps({store,isServer}) {
        store.dispatch(actions.loadSerial());
     }
    componentDidMount() {
        this.props.actions.loadSerial();
    }
    render () {
        const {serials} = this.props;
        return (
            <Layout>
                <Head><title>Home</title></Head>
                <ul>
                </ul>
            </Layout>
            )
    }
}


const mapDispatchToProps=(dispatch)=>{
    return{
        actions: bindActionCreators(actions,dispatch)
    }
};

export default withRedux(initStore, null, mapDispatchToProps)(Index);
  • Вопрос задан
  • 1121 просмотр
Решения вопроса 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
1) проверьте, что в индексном файле редьюсеров, ваш редьюсер сериалов подключен
2)
case LOAD_SERIAL_SUCCESS:
  return {
      ...state, // берем все что было в state
      serials: action.serials, // но перезаписываем свойство serials
  };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы