React中受控与非受控组件

首次发表在个人博客

受控组件

 {
        this.setState({
            value: e.target.value.toUpperCase(),
        });
    }}
/>

this.name = i} defaultValue="BeiJing" /> ); } } export default UnControlled;

对比受控组件和非受控组件

将输入的字母转化为大写展示

 {
        this.setState({
            value: e.target.value.toUpperCase(),
        });
    }}
/>

直接展示输入的字母

 {
        this.setState({
            value: e.target.value.toUpperCase(),
        });
    }}
/>

1.性能上的问题

在受控组件中,每次表单的值发生变化,都会调用一次onChange事件处理器,这确实会带来性能上的的损耗,虽然使用费受控组件不会出现这些问题,但仍然不提倡使用非受控组件,这个问题可以通过Flux/Redux应用架构等方式来达到统一组件状态的目的.

2.是否需要事件绑定

使用受控组件需要为每一个组件绑定一个change事件,并且定义一个事件处理器来同步表单值和组件的状态,这是一个必要条件.当然,某些情况可以使用一个事件处理器来处理多个表单域

import React, { Component } from 'react';

class Controlled extends Component {
    constructor(...args) {
        super(...args);
        this.state = {
            name: 'xingxing',
            age: 18,
        };
    }
    handleChange = (name, e) => {
        const { value } = e.target;
        this.setState({
            [name]: value,
        });
    }
    render() {
        const { name, age } = this.state;
        return (
            
); } } export default Controlled;

表单组件的几个重要属性

1.状态属性

React的form组件提供了几个重要的属性,用来显示组件的状态

  • value: 类型为text的input组件,textarea组件以及select组件都借助value prop来展示应用的状态
  • checked: 类型为radio或checkbox的组件借助值为boolean类型的selected prop来展示应用的状态
  • selected: 该属性可作用于select组件下面的option上,React并不建议这种方式表示状态.而推荐在select组件上使用value的方式

2.事件属性

当状态属性改变时会触发onChange事件属性.受控组件中的change事件与HTML DOM中提供的input事件更为类似;

你可能感兴趣的:(javascript,react.js)