• [React Fundamentals] Composable Components


    To make more composable React components, you can define common APIs for similar component types.

    import React from 'react';
    import ReactDOM from 'react-dom';
    
    export default class App extends React.Component{
        constructor(){
            super();
            this.state = {
                red: 0,
                green: 0,
            }
        }
        update(){
            this.setState({
                red: ReactDOM.findDOMNode(this.refs.red.refs.inp).value,
                green: ReactDOM.findDOMNode(this.refs.green.refs.inp).value,
            })
        }
        render(){
            return(
              <div>
                  <NumInput
                    ref="red"
                    type="range"
                    min={0}
                    max={255}
                    step={1}
                    val={+this.state.red}
                    label="Red"
                    update={this.update.bind(this)}
                  ></NumInput>
                  <NumInput
                    ref="green"
                    type="number"
                    step={0.01}
                    val={+this.state.green}
                    label="Green"
                    update={this.update.bind(this)}
                  ></NumInput>
              </div>
            );
        }
    }
    
    class NumInput extends React.Component{
        constructor(){
            super();
        }
        render() {
            const label = this.props.label ?
                    <label>{this.props.label} - {this.props.val}</label> :
                    '';
            return (
                <div>
                    <input
                        type={this.props.type}
                        min={this.props.min}
                        max={this.props.max}
                        step={this.props.step}
                        defaultValue={this.props.val}
                        onChange={this.props.update}
                        ref="inp"
                    />
                    {label}
                </div>
            );
        }
    }
    
    
    NumInput.propTypes = {
        type: React.PropTypes.oneOf(['range', 'number']),
        min: React.PropTypes.number,
        max: React.PropTypes.number,
        step: React.PropTypes.number,
        val: React.PropTypes.number,
        label: React.PropTypes.string,
        update: React.PropTypes.func.isRequired,
    };
    
    NumInput.defaultProps = {
        type: 'range',
        min: 0,
        max: 255,
        step: 1,
        val: 0,
        label: ''
    };
  • 相关阅读:
    LoadRunner脚本关联动态数据的最简单方法
    LoadRunner 检查点函数总结
    算法(一)时间复杂度
    JAVA虚拟机总结
    java8中Lambda表达式和Stream API
    算法总结
    listview 异步加载图片并防止错位
    Java设计模式菜鸟系列(一)策略模式建模与实现
    Python基础--webbrowser
    Shiro学习(22)集成验证码
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5782512.html
Copyright © 2020-2023  润新知