[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: ''
};
复制代码

 

posted @   Zhentiw  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示