javascript - 如何使用在reducer 中控制组件的className
高洛峰
高洛峰 2017-04-11 12:25:05
[JavaScript讨论组]

我有一个LoginTable组件,这个组件是和其他组件没有任何嵌套关系的

然后,我希望在另一组件中添加一个事件,能控制LoginTable的显示和隐藏

当isLogin 为false的时候,展示LoginTable 组件

action:

reducer:

简言之,如何在reducer 中控制LoginTable 组件的className。。。?

问题补充

我仿照 一楼的答案自己尝试了一下,但是跑不起来

这个例子有两个组件, 一个子组件一个父组件

这是子组件 component1.js 全部代码

import React, { Component } from "react";
import { bindActionCreators } from "redux";
import { connect } from "react-redux";
import { LogIn, LogOut } from "../actions/action.js";

class Login extends Component {
    constructor (props, context) {
        super (props, context);
    }

    render () {
        if (this.props.loginState) {
            return (
                

登录框

) } else { return null; } } } export default connect( (state) => { return { loginState: state.loginState } }, (dispatch) => { return { actions: bindActionCreators({ LogIn, LogOut }, dispatch) } } )(Login);

这是父组件 component2.js 全部代码

import React, { Component } from "react";
import { render } from "react-dom";
import { bindActionCreators } from "redux";
import { Provider } from "react-redux";
import Login from "../src/component1.js";
import { configureStore } from "../stores/store.js"

class App extends Component {
    constructor (props, context) {
        super (props, context);
        this.showLogin = this.showLogin.bind(this);
    }

    showLogin () {
        let {
            loginState,
            logIn,
            logOut
        } = this.props;

        if (loginState) {
            logOut();
        } else {
            logIn();
        }
    }

    render () {
        return (
            

) } } let store = configureStore(); render( , document.querySelector(".demo"), () => console.log(">>>>>> 渲染已经完成啦 <<<<<<") )

报错的原因是

action

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
天蓬老师

1.首先是不推荐改变className的,应该是更加不同state 返回不同的UI
2.把登录state 加到全局state里
3.登陆的state 绑定到登陆组件上。
登陆框组件

import React, { Component } from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';

class Login extends Component {
    constructor(props, context) {
    super(props, context);
  }
  render() {
      if (this.props.loginState) {
          return <登陆框 />
      }
      return null;
  }
}

function mapStateToProps(state) {
  return {
    loginState: state.loginState,
  };
}
// action 创建函数是我们想要通过 props 获取的
function mapDispatchToProps(dispatch) {
  return {
    actions: bindActionCreators({
      logIn,
      logOut,
    }, dispatch),
}

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(LoginMain);

其他组件:

import React, { Component } from 'react';
import { bindActionCreators } from 'redux';
import Login from '../components/Login';

class App extends Component {

  constructor(props, context) {

    super(props, context);
      this.showLogin = this.showLogin.bind(this);
  }
  showLogin() {
      this.props.actions.logIn();
  }
  render() {
    return (
        <Login />
        <p onClick={this.showLogin} ></p>
      )
  }
}
function mapStateToProps(state) {
  return {
   //
  };
}
// action 创建函数是我们想要通过 props 获取的
function mapDispatchToProps(dispatch) {
  return {
    actions: bindActionCreators({
      logIn,
      logOut,
    }, dispatch),
}

export default App
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号