刚学到 redux, 遇到一个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blankmiss
V2EX    React

刚学到 redux, 遇到一个问题

  •  
  •   blankmiss 2023-03-29 17:47:07 +08:00 2302次点击
    这是一个创建于 927 天前的主题,其中的信息可能已经有所发展或是发生改变。

    react 18 npm: lst 版本

    { "name": "04_learn_redux", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "axios": "^1.3.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^8.0.5", "react-scripts": "5.0.1", "redux": "^4.2.1", "redux-thunk": "^2.4.2", "web-vitals": "^2.1.4" } 

    我看文档上写的这个用 connect 高阶函数 用 mapStateToProps 去获取值传给组件 但是我打印了 props 是 {}

    pages/about.jsx

    import React, {PureComponent} from 'react'; import { connect } from 'react-redux' export class About extends PureComponent { render() { console.log("about",this.props) const { counter } = this.props console.log("about",counter) //控制台显示 about undefined return ( <div> <h2> About Counter: {counter}</h2> </div> ); } } // 传入 组件的 state 然后返回一个隐射关系 因为不是 store 里的所有数据我们都需要 const mapStateToProps = state => ({ counter: state.counter }) // connect 是一个高阶函数 调用方法为 connect(函数 1 ,函数 2)(组件) export default connect(mapStateToProps)(About); 

    store/index.js

    import {createStore} from "redux"; import reducer from "./reducer"; const store = createStore(reducer) export default store 

    stote/reducer.js

    import * as actionTypes from "./constants" const initialState = { counter: 100 } function reducer(state = initialState, action) { switch (action.type) { case actionTypes.ADD_NUMBER: return { ...state, counter: state.counter + action.num } case actionTypes.SUB_NUMBER: return { ...state, counter: state.counter - action.num } case actionTypes.CHANGE_BANNERS: return { ...state, banners: action.banners } case actionTypes.CHANGE_RECOMMENDS: return { ...state, recommends: action.recommends } default: return state } } export default reducer 

    index.js

    import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; import { Provider } from 'react-redux' import store from './store' const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> {/* 包裹 最顶层 传入一个 store */} <Provider store={store}> <App/> </Provider> </React.StrictMode> ); 
    17 条回复    2023-04-09 07:14:41 +08:00
    cF06myaQ57WHKMBv
        1
    cF06myaQ57WHKMBv  
       2023-03-29 18:07:50 +08:00   1
    import React, {PureComponent} from 'react';
    import { connect } from 'react-redux'

    // 导出 About
    export class About extends PureComponent {
    render() {
    console.log("about",this.props)
    const { counter } = this.props
    console.log("about",counter) //控制台显示 about undefined
    return (
    <div>
    <h2> About Counter: {counter}</h2>
    </div>
    );
    }
    }

    const mapStateToProps = state => ({
    counter: state.counter
    })

    // 默认导出
    export default connect(mapStateToProps)(About);

    这个组件中,有两个导出,你导入的时候是不是取错组件了?
    dumbass
        2
    dumbass  
       2023-03-29 18:15:46 +08:00
    如果是单项目中使用,我觉得不如用 jotai 之类的状态管理库,好写也好看,redux 写起来好复杂
    blankmiss
        3
    blankmiss  
    OP
       2023-03-29 18:23:09 +08:00
    @ljtfdt 这个好象是 说 es6 的导出格式吧 两种导入的方法 这个是 webstorm 的默认生成模版 应该不会有错
    blankmiss
        4
    blankmiss  
    OP
       2023-03-29 18:23:55 +08:00
    @bojackhorseman 按照路线学的 哈哈
    cF06myaQ57WHKMBv
        5
    cF06myaQ57WHKMBv  
       2023-03-29 18:26:22 +08:00   1
    @blankmiss 但是你使用 About 组件的时候是怎么导入的?
    blankmiss
        6
    blankmiss  
    OP
       2023-03-29 18:26:32 +08:00
    app 里面直接引用的 store 有数据,about 组件里面用的 react-redux 的 connect 无数据
    cF06myaQ57WHKMBv
        7
    cF06myaQ57WHKMBv  
       2023-03-29 18:27:00 +08:00   1
    @blankmiss 你在哪里使用了 About 组件
    blankmiss
        8
    blankmiss  
    OP
       2023-03-29 18:27:47 +08:00
    @ljtfdt import {About} from "./pages/About";
    blankmiss
        9
    blankmiss  
    OP
       2023-03-29 18:28:21 +08:00
    @ljtfdt 我改成 import About from "./pages/About"; 就可以了 这是为什么呢
    cF06myaQ57WHKMBv
        10
    cF06myaQ57WHKMBv  
       2023-03-29 18:28:30 +08:00   1
    @blankmiss 你试试 import About from "./pages/About";
    cF06myaQ57WHKMBv
        11
    cF06myaQ57WHKMBv  
       2023-03-29 18:29:54 +08:00   1
    @blankmiss import {About} from "./pages/About"; 这样导入的话 使用的是 export class About extends PureComponent 这里导出的,而不是经过 connect 高阶组件包裹的那个组件
    blankmiss
        12
    blankmiss  
    OP
       2023-03-29 18:31:18 +08:00
    @ljtfdt 懂了 可以理解为 我用的是原生的 about 组件 不是用的 connect 返回的新组件 谢谢你的帮忙
    Jaosn
        13
    Jaosn  
       2023-03-30 10:57:16 +08:00
    都 2023 年了,不推荐用
    MENGKE
        14
    MENGKE  
       2023-03-30 11:14:39 +08:00
    好几年没用过 redux 了,写起来太复杂太麻烦了,现在我都是用 zustand 之类的状态库
    dw2693734d
        15
    dw2693734d  
       2023-04-02 14:34:29 +08:00
    什么年代了,不用 redux 了。直接自带的 use 系列就够了
    blankmiss
        16
    blankmiss  
    OP
       2023-04-02 15:01:05 +08:00
    @dw2693734d 因为才刚学 昨天才学到 hook
    snowma
        17
    snowma  
       2023-04-09 07:14:41 +08:00
    用 dva.js 吧
    关于     帮助文档     自助推系统     博客     API     FAQ     Solana     2674 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 13:47 PVG 21:47 LAX 06:47 JFK 09:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86