美文网首页
React 属性于事件

React 属性于事件

作者: LengZ | 来源:发表于2018-08-20 14:15 被阅读0次

React.js入门基础与案例开发 by ParryKK in imooc.com 学习笔记

React state 属性

  • state 对于模块属于自身属性

  • state 的作用域只属于当前类,不污染其它模块

  • state 初始化

    constructor() {
      super(); // 调用基类的所有初始化方法
      this.state = {
        username : "Parry",
        age : 20
      };    // 初始化赋值
    }
    
  • state 变量调用

    <p>{this.state.username} {this.state.age}</p>
    
  • state 变量更改

    this.setState({username: "IMOOC"});
    

React props 属性

  • 模块的外来属性

  • props 对于模块属于外来属性

  • props 传递

    // Parent.js
    <Parent userid={123456} username={"nick"} />
    
  • props 接收

    // Child.js
    <p>{this.props.userid} {this.props.username}</p>
    
  • props 验证

    Prop Types 说明

    验证 Parent 传来的数据类型, 如果类型不对, console 会警告

    // Child.js
    Child.propTypes = {
      userid : React.PropTypes.number,
    }
    

    强制 Parent 必须传入 userid ,否则, console 会警告

    // Child.js
    Child.propTypes = {
      userid : React.PropTypes.number.isRequired
    }
    

    定义 props 默认值

    const defaultProps = {
        userid : 123
    }
    Child.defaultProps = defaultProps;
    Child.propTypes = {
      userid : React.PropTypes.number
    }
    
  • 传递所有 props 参数

    <Component {...this.props} more="value" />
    

React 事件和数据双向绑定

  • 事件绑定

    // Parent.js
    var React = require('React')
    // 外部组件必须 export 才能被加载
    export default class Parent extends React. Component {
      constructor() {
        super(); // 调用基类的所有初始化方法
        this.state = {
          username : "Parry",
          age : 20
        };    // 初始化赋值
      }
      changeUserInfo(age) {
        this.setState({
          age : age
        });
      }
      render() {
        <div>
          <p>username: {this.state.username}</p>
          <p>age: {this.state.age}</p>
          <input type="button" value="提交" onClick={this.changeUserInfo.bind(this, 99)} />
        </div>
      }
    }
    
  • Child 传参数到 Parent

    // Parent.js
    var React = require('React')
    import Child = "./Child"
    // 外部组件必须 export 才能被加载
    export default class Parent extends React. Component {
      constructor() {
        super(); // 调用基类的所有初始化方法
        this.state = {
          username : "Parry",
          age : 20
        };    // 初始化赋值
      }
      changeUserInfo(event) {
        this.setState({
          age : event.target.value
        });
      }
      render() {
        <div>
          <p>username: {this.state.username}</p>
          <p>age: {this.state.age}</p>
          <Child changeUserInfo={this.changeUserInfo.bind(this)}/>
        </div>
      }
    }
    
    // Child.js
    var React = require('React')
    
    // 外部组件必须 export 才能被加载
    export default class Child extends React. Component {
      render() {
        <div>
          <p>子页面输入: <input type="text" onChange={this.props.changeUserInfo}</p>
        </div>
      }
    }
    

React 组件的 Refs

  • 获取 html 节点进行操作

  • 第一种方式 (html 原生方法)

    changeUserInfo(age) {
      var mySubmitBotton = document.getElementById('submitButton');
      ReactDom.findDOMNode(mySubmitBotton).style.color = 'red';
    }
    render() {
      <div>
        <input id="submitButton" type="button" value="提交" onClick={this.changeUserInfo.bind(this, 99)} />
      </div>
    }
    
  • 第二种方式 (refs 方法)

    changeUserInfo(age) {
      this.refs.submitButton.style.color = 'red';
    }
    render() {
      <div>
        <input ref="submitButton" type="button" value="提交" onClick={this.changeUserInfo.bind(this, 99)} />
      </div>
    }
    
  • Refs 是访问到组件内部 DOM 节点唯一可靠的方法

  • Refs 会自动销毁对子组件的引用

  • 不要在 renderrender 之前对 Refs 进行调用, 因为组件还没加载好, 在 componentDidMount() 后调用

  • 不要滥用 Refs

React 独立组件间共享 Mixin

  • 组件间,事件共享

  • 公共函数在不同的组件里调用

  • 可以做组件属性或者生命周期的事件

  • ES6 不支持,可以运用插件使用 Mixin

    sudo npm install --save react-mixin@2
    
    // mixins.js
    const MixinLog = {
      log() {
        console.log("hihi");
      }
    }
    export default MixinLog
    
    // Component.js
    import ReactMixin from 'react-mixin';
    import MixingLog from './mixins';
    export default class Component extends React.Component {
      changeUserInfo() {
        MixinLog.log();
      }
      render() {
        <div>
          <input ref="submitButton" type="button" value="提交" onClick={this.changeUserInfo.bind(this)} />
        </div>
      }
    }
    ReactMixin(Component.prototype, MixinLog);
    

相关文章

  • React 属性于事件

    React.js入门基础与案例开发 by ParryKK in imooc.com 学习笔记 React stat...

  • 2018-11-07 react 事件处理

    react事件处理和dom事件处理是相似的。 react: Dom: 所以: React事件绑定属性的命名采用驼峰...

  • React 中的事件处理(2)

    事件处理 React 元素采用类似 DOM0 标准中的事件属性定义方法 JSX 点击 直接创建 React 元素方...

  • react随笔5 事件处理

    事件处理 React元素的事件处理和DOM元素的事件处理很相似,但是有一点语法上的不同: React事件绑定属性的...

  • React之事件处理

    React 元素的事件处理和DOM元素的很相似,但是有一点语法上的不同: 事件处理 React 事件绑定属性的命名...

  • Handling Events(处理事件)

    所有的react元素都有基于dom事件的属性,例如按钮元素有一个onClick属性,还有双击事件、鼠标移入事件(o...

  • React事件处理

    事件处理 React 元素的事件处理和 DOM元素的很相似。但是有一点语法上的不同:1、React事件绑定属性的命...

  • React属性与事件

    1、State属性 state属性属于自身属性 this.state用于初始化 初始化可以放在构造函数里面 修改s...

  • React事件处理

    React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同: React 事件绑定属性的命名采用驼峰式...

  • 事件处理

    事件处理 react提供了一系列的属性处理事件,这点和dom的事件处理是差不多的,不同的是react采用的是驼峰式...

网友评论

      本文标题:React 属性于事件

      本文链接:https://www.haomeiwen.com/subject/yfqliftx.html