zoukankan      html  css  js  c++  java
  • [React] Make Controlled React Components with Control Props

    Sometimes users of your component want to have more control over what the internal state is. In this lesson we'll learn how to allow users to control some of our component’s state just like the <input />'s value prop.

    Controlled props is the prop that component let user fully control.

    import React from 'react';
    
    class Toggle extends React.Component {
    
        // An empty function
        static defaultProps = {
            defaultOn: false,
            onToggle: () => {
            }
        };
    
        // default state value
        initialState = {on: this.props.defaultOn};
        state = this.initialState;
    
        isControlled() {
            return this.props.on !== undefined;
        }
    
        // toggle method
        toggle = () =>{
          if (this.isControlled()) {
            this.props.onToggle(!this.props.on)
          } else {
              this.setState(
                  ({on}) => ({on: !on}),
                  () => {
                      this.props.onToggle(this.state.on)
                  }
              );
          }
        };
    
    
        reset = () => this.setState(
            this.initialState
        );
    
        render() {
            return this.props.render({
                on: this.isControlled() ?
                        this.props.on :
                        this.state.on,
                toggle: this.toggle,
                reset: this.reset,
                getProps: (props) => {
                    return {
                        'aria-expanded': this.state.on,
                        role: 'button',
                        ...props
                    };
                }
            });
        }
    }
    
    export default Toggle;
  • 相关阅读:
    Kafka-1
    消息队列
    分布式分类
    认识分布式
    数据库引擎
    Django插入多条数据—bulk_create
    Django中update和save()同时作用
    联合唯一去重的SQL
    Direct3D11学习:(三)Direct3D11初始化
    Direct3D11学习:(零)常见问题及解决方法整理
  • 原文地址:https://www.cnblogs.com/Answer1215/p/8041059.html
Copyright © 2011-2022 走看看