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;
  • 相关阅读:
    IOS开发环境
    IOS开发环境搭建
    Eclipse简明使用教程(java集成开发环境)
    分布式相关
    成为架构师之路认识分布式架构
    什么是分布式系统,如何学习分布式系统
    分布式定义
    VIM命令详解
    vim常用命令
    vi/vim 命令使用详解
  • 原文地址:https://www.cnblogs.com/Answer1215/p/8041059.html
Copyright © 2011-2022 走看看