zoukankan      html  css  js  c++  java
  • React 点击按钮显示div与隐藏div,并给div传children

    最近做了一个react的点击按钮显示与隐藏div的一个小组件:

    【筛选】组件FilterButton

    import React,{Component} from 'react';
    import {render} from 'react-dom';
    
    export default class FilterButton extends Component{
      constructor(props){
          super(props);
          this.state = {
             clickProps:{
                 display: 'none',  //控制display的值来隐藏与显示
                 name:'筛选'
             }
          }
      }
    
      //组件的props发生改变,在组件接收到一个新的prop时被执行。这个方法在初始化render时不会被调用。
      componentWillReceiveProps(nextProps) {
            if(nextProps.needConfirm) {
                 this.setState(
                      {
                         clickProps:{
                                display: 'none',
                                name:'筛选'
                         }
                     }
                 );
             }
        }
    
    /*
     *  'inline-block' == this.state.clickProps.display   条件:当前的state中display的值是否为 inline-block
     *   this.setState({clickProps:{display: 'none',name:'筛选'}})  值:  如果是,则隐藏div并在button上显示'筛选'
     *   this.setState({clickProps:{display: 'inline-block',name:'取消'}});  值:  如果不是,则显示div并在button上显示'取消'
    */
      changeDisplay() {
        'inline-block' == this.state.clickProps.display ? this.setState({clickProps:{display: 'none',name:'筛选'}}) : this.setState({clickProps:{display: 'inline-block',name:'取消'}});
      this.props.click(this.state.clickProps.display);
      }
    
    //this.props.children为这个按钮的子组件
      render(){
         return(
             <div className="box" style={{'margin': '20'}}>
                  <button ref="tip" className="btn btn-default" style={{'display':'block','marginTop': '118'}} onClick={this.changeDisplay.bind(this)}><span className="glyphicon glyphicon-th-list"></span> {this.state.clickProps.name}</button>
                  <div className="filter-box" style={{'display':this.state.clickProps.display,'height':'auto','padding':'10','border':'1px solid #ddd','borderRadius':'4','boxShadow':'0px 2px 4px #ccc','marginTop':'10','backgroundColor':'#fff','position':'fixed','left':'310px','zIndex':'9999','transition':'all 3s ease-in-out'}}>
                         {this.props.children}
                  </div>
             </div>
         );
      }
    }

    【调用】组件 FilterButton

    import React,{Component} from 'react';
    import {render} from 'react-dom';
    import Input from 'react-bootstrap/lib/Input.js';
    
    import FilterButton from '../../../../public_component/button/FilterButton';
    
    export default class InspectionResults extends Component {
      constructor(props){
          super(props);
      }
    
     render(){
    
         //使用一个常量,调用FilterButton,并把它的子组件回传
    
         const selectBtn = (
             <FilterButton click={this.selectClick.bind(this)} needConfirm={this.state.needConfirm}>
                 <Input className="box-select" type='select'
                       placeholder="选择部门" onChange={this.changeDepartment.bind(this)} value={this.state.department}>
                     {department}
                 </Input>
                 <Input className="box-select" type='select'
                       placeholder="选择产品线" onChange={this.changeProductLine.bind(this)} value={this.state.productLine}>
                     {productLine1}
                 </Input>
                 <button type="button" name="新增" className="btn btn-jj-add mt24" onClick={this.selectConfirm.bind(this)}>
                     确定
                 </button>
             </FilterButton>
        );
    
       return(
         <div>{selectBtn}</div>
       );
     }
    }

    react.js 传子组件的另一个方法,也可以这样做:

    const children = (
        <Input className="box-select" type='select'
                           placeholder="测试加载" onChange={this.changeDepartment.bind(this)} value={this.state.department}>
                        {department}
                    </Input>
                    <Input className="box-select" type='select'
                           placeholder="测试加载" onChange={this.changeProductLine.bind(this)} value={this.state.productLine}>
                        {productLine1}
                    </Input>
                    <button type="button" name="新增" className="btn btn-jj-add mt24" onClick={this.selectConfirm.bind(this)}>
                        确定
                    </button>
    );
    
    <FilterButton chlidren={this.props.children} />
  • 相关阅读:
    JSPatch 可以让你用 JavaScript 书写原生 iOS APP
    iOS如何解析crash文件中的地址
    这几个Xocode插件用过一段时间还比较稳定好用,Xcode6兼容,推荐给大家:
    你的下拉刷新是否“抖”了一下
    iOS上Delegate的悬垂指针问题
    UITableView性能优化
    block详解
    runloop timer
    图片知识总结
    视像会议软件推荐备忘
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/5903258.html
Copyright © 2011-2022 走看看