账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    redux修改state相关组件没有更新?
    11
    0

    问题描述

    redux修改state相关组件没有更新

    问题出现的环境背景及自己尝试过哪些方法

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)

    //redux.js
    let initState = {
        toggle: false,
    }
    export function counter(state=initState, action) {
        let stateCopy = {...state}
        switch (action.type) {
            case toggle:
                stateCopy.toggle?stateCopy.toggle=false:stateCopy.toggle=true;
                return stateCopy;
            default:
                //初始状态
                return stateCopy;
        }
    }
    
    //action creator 创建action
    export function toggle() {
        return {type:toggle}
    }
    //index.js
    import Siderbar from './pages/layout/sidebar';
    import { createStore } from "redux";
    import {counter,open,close,toggle} from './redux';
    
    import './App.css';
    const store = createStore(counter);
    console.log(store.getState(),'store')
    ReactDOM.render(
    <Router>
        <div className='wrapper'>
            <div className='siderbar'><Siderbar store={store}/></div>
            <div className='main'>
                <div className='header'><Header store={store} toggle={toggle}/></div>
                <div className='content'>
                    <Route path='/page1' component={Page1} />
                    <Route path='/page2' component={Page2} />
                </div>
            </div>
        </div>
    </Router>, document.getElementById('root'));
    //header.js
    import React from 'react';
    class Header extends React.Component{
        render(){
            const store = this.props.store;
            const isCollopse = store.getState();
            const toggle = this.props.toggle;
            console.log(isCollopse,'isCollopse')
            console.log(this.props,'this.props')
            return(
                <div onClick={() => {store.dispatch(toggle());console.log(store.getState().toggle)}}>头部</div>
                // <div>头部</div>
            );
        }
    }
    export default Header;
    //siderbar.js
    render() {
        const store = this.props.store;
        let toggle = store.getState().toggle;
        console.log(store.getState(),'111')
        return (
          <div style={{ maxWidth: 256 }}>
            {/* <Button type="primary" onClick={this.toggleCollapsed} style={{ marginBottom: 16 }}>
              <Icon type={this.state.collapsed ? 'menu-unfold' : 'menu-fold'} />
            </Button> */}
            <Menu
              defaultSelectedKeys={["1"]}
              defaultOpenKeys={["sub1"]}
              mode="inline"
              theme="dark"
              inlineCollapsed={toggle}
            >

    你期待的结果是什么?实际看到的错误信息又是什么?

    期待的结果:点击header改变state的toggle控制siderbar的收缩
    错误:state改变了但是siderbar的状态没有更新

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 微信昵称女繁体字 普通会员 1楼

      在Redux中,如果你试图修改组件的状态,但没有更新,那么这可能是由于以下几个原因:

      1. 状态的更改发生在组件的更新中,而不是在重新渲染中。
      2. 状态的更改发生在渲染函数中,而不是在重新渲染中。
      3. 你可能没有正确地更新你的组件的状态。
      4. 你可能没有正确地处理你的组件的状态更改。

      为了检查这些情况,你可以尝试以下步骤:

      1. 在组件的更新函数中检查状态的更改。如果你在组件的更新函数中进行了更改,那么你应该能看到这个更改。
      2. 在渲染函数中检查状态的更改。如果你在渲染函数中进行了更改,那么你应该能看到这个更改。
      3. 在你的reducer函数中检查状态的更改。如果你在你的reducer函数中进行了更改,那么你应该能看到这个更改。
      4. 在你的actions函数中检查状态的更改。如果你在你的actions函数中进行了更改,那么你应该能看到这个更改。

      如果你仍然无法找到问题的原因,那么可能需要更深入地检查你的代码。你可能需要查看你的组件的状态是如何更新的,以及你的actions是如何触发这个更新的。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部