【问题标题】:Unable to dispatch state values from redux store无法从 redux 存储分派状态值
【发布时间】:2021-01-23 01:14:50
【问题描述】:

我是 react 和 redux 的新手,并试图从 store 中分派状态但无法这样做, 请任何人帮助我解决问题...

App.js

import React from "react";
import store from './reduxStore/store';
import { Provider } from 'react-redux';
import Sidebar from './Sidebar';


function App() {

  return (
    <div>
      <Provider store={store}>
         <Sidebar ></Sidebar>
      </Provider>
    </div>
  );
}



export default (App);

这是我的 sidebar.js 组件

import React, { useEffect } from 'react';
import { updatePageLinkActions } from "../../reduxStore/actions/updatePageLinkActions";
import { connect } from "react-redux";



const Sidebar = () =>{

useEffect(() => {
    return updatePageLinkActions
}, [])


    return (
        <>
            <ListItem button onClick={updatePageLinkActions}>
                <ListItemIcon><Home></Home></ListItemIcon>
                <ListItemText primary="Dashboard" />
            </ListItem>
            <ListItem button onClick={() => handleOpenPage("contact")}>
                <ListItemIcon><AcUnit></AcUnit></ListItemIcon>
                <ListItemText primary="Contact" />
            </ListItem>
        </>
        
    )
}

const mapStateToProps = (state) => ({
    updatePage: state.updatePage.pgLink
})

export default connect(mapStateToProps, { updatePageLinkActions })(SidebarItems);

存储 Store.js

import { createStore, applyMiddleware, compose } from "redux";
import thunk from 'redux-thunk';
import rootReducer from './reducers';

const initialState = {};
const middleWare = [thunk]

const store = createStore(
  rootReducer, 
  initialState, 
  compose(
    applyMiddleware(...middleWare),
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
  )
) 

export default store;

根减速器 rootReducer.js

import { combineReducers } from 'redux';
import updatePageLinkReducer from './updatePageLinRreducer';

export default combineReducers({
    updatePage: updatePageLinkReducer
});

动作updatePageLinkActions.js

import { UPDATE_PAGE_LINK } from "../actionTypes";
//import store from "../store";

export const updatePageLinkActions = dispatch => {

  console.log("actions log ", dispatch.payload)

  return dispatch({
      type: UPDATE_PAGE_LINK,
      payload: {pageLink : "Action_pageLink" }
    })        
};

Reducer updatePageLinkReducer.js

import { UPDATE_PAGE_LINK } from '../actionTypes';

const initialState = {
  pgLink: []
};

// eslint-disable-next-line import/no-anonymous-default-export
export default function(state = initialState, action) {
  switch (action.type) {
    case UPDATE_PAGE_LINK:
      console.log("Action called ")
      return { ...state, pgLink: action.payload }
    default:
      return state;
  }
}

我无法从商店发送值, 有人帮助我...

【问题讨论】:

    标签: javascript reactjs redux react-redux


    【解决方案1】:

    如果您使用的是函数式组件,我强烈建议您不要使用connect

    要从 Redux 存储中获取状态,您可以使用 useSelector 钩子,而要调度操作,您可以使用 useDispatch 钩子。

    import { useDispatch, useSelector } from 'react-redux'
    ...
    const dispatch = useDispatch()
    const updatePage = useSelector(state => state.updatePage.pgLink)
    
    const updatePageLinkActions = () => {
        dispatch({
          type: UPDATE_PAGE_LINK,
          payload: {pageLink : "Action_pageLink" }
        })
    }
    ...
    

    【讨论】:

      【解决方案2】:

      您的动作创建者定义不正确。

      应该是这样的:

      
      export const updatePageLinkActions = () => dispatch => {
      
        console.log("actions log ", dispatch.payload)
      
        return dispatch({
            type: UPDATE_PAGE_LINK,
            payload: {pageLink : "Action_pageLink" }
          })        
      };
      

      【讨论】:

        猜你喜欢
        • 2020-04-22
        • 1970-01-01
        • 2020-01-12
        • 2017-12-19
        • 2019-05-04
        • 1970-01-01
        • 1970-01-01
        • 2020-11-09
        • 2016-04-21
        相关资源
        最近更新 更多