美文网首页
React的多组件状态提升案例

React的多组件状态提升案例

作者: JohnYuCN | 来源:发表于2020-12-19 16:35 被阅读0次

一、案例说明:

摄氏,华氏,开氏温度的转换器


image.png

二、组件关系图:

image.png

三、代码(复制粘贴,即可运行)

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>Add React in One Minute</title>
</head>

<body>

    <h2>综合演示状态的控制</h2>
    <!-- We will put our React component inside this div. -->
    <div id="app"></div>
    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>

    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
   
    <!-- Load our React component. -->
    <script type="text/babel">

        // 温度转换工具
        class TemperatureUtil{
            //摄氏转华式
            static c2f(value){
                value=value*9/5+32
                return Math.round(value*100)/100
            }
            //摄氏转开式
            static c2k(value){
                return value-273.12
            }

            //华式转摄氏
            static f2c(value){
                value=(value-32)*5/9
                return Math.round(value*100)/100
            }
            //开式转摄氏
            static k2c(value){
                return parseFloat(value) + 273.12
            }
        }

        // 水的状态的指示器
        function VerdictShow(props){
            let info=props.temperature>=100?"水被烧开了":"水还没有被烧开"
            return <div>{info}</div>
        }

        //这是:输入温度的表单(props上共有三个参数:scale-度量单位,onChangeTemprature-value变化的回调,temperature-温度值)
        //由于不使用state及生命周期方法,所以此类简化成为function
        function TemperaturInput(props){
            let temperature=props.temperature
            let changeTemprature=event=>props.onChangeTemprature(event.target.value)
            return (
                    <fieldset>
                        <legend>请输入温度({props.scale})</legend>
                        <input type="number" value={temperature} onChange={changeTemprature}/>
                    </fieldset>
                )
        }


        class Caculator extends React.Component{
            constructor(props){
                super(props)
                this.state={temperature:100} //使用摄氏温度做为标准值
            }
            //state的变化,引起render的回调
            render(){
                //由摄氏标准向华式、开式的转换
                let fahrenheit=TemperatureUtil.c2f(this.state.temperature)
                let kalvin=TemperatureUtil.c2k(this.state.temperature)
                return (
                    <div>
                        <TemperaturInput scale="摄氏" temperature={this.state.temperature} onChangeTemprature={this.changeCelsiusTemperatureHandler}/>
                        <TemperaturInput scale="华式" temperature={fahrenheit} onChangeTemprature={this.changeFahrenheitTemperatureHandler}/>
                        <TemperaturInput scale="开式" temperature={kalvin} onChangeTemprature={this.changeKalvinTemperatureHandler}/>
                        <hr/>
                        <VerdictShow temperature={this.state.temperature} />
                    </div>
                )
            }
            //三个不同输入的回调,先转换为摄氏标准,再修改state,进而调用render
            changeCelsiusTemperatureHandler=(temperature)=>{
                this.setState({temperature:temperature})
            }
            changeFahrenheitTemperatureHandler=(temperature)=>{
                temperature= TemperatureUtil.f2c(temperature)
                this.setState({temperature:temperature})
            }
            changeKalvinTemperatureHandler=(temperature)=>{
                temperature= TemperatureUtil.k2c(temperature)
                this.setState({temperature:temperature})
            }
        }
        
        ReactDOM.render(<Caculator/>,document.querySelector('#app'))
    </script>
</body>

</html>

相关文章

  • React的多组件状态提升案例

    一、案例说明: 摄氏,华氏,开氏温度的转换器 二、组件关系图: 三、代码(复制粘贴,即可运行)

  • React中的状态提升

    React中的状态提升概括来说,就是将多个组件需要共享的状态提升到它们最近的父组件上.在父组件上改变这个状态然后通...

  • React 进阶二 组件详解

    React组件 React的组件大概分为俩部分,无状态组件和有状态组件 无状态组件。下面React官网中定义的一个...

  • 通过案例深入了解React

    结合react官网的案例,利用webpack+es6,完成了React案例。 React官网组件案例 github...

  • React笔记10(状态提升)

    状态提升 使用React经常会遇到几个组件需要共用状态数据的情况。这种情况下,我们最好把这部分状态数据提升到他们最...

  • React学习知识小总结

    react依赖: react react-dom babel-preset-react 组件自身状态设置初始状态:...

  • React状态提升

    通常,多个组件需要反映相同的变化数据,这时通常将共享状态提升到最近的共同父组件中去。 在 React 应用中,任何...

  • React入门(二)

    三、React组件 React 组件基本上是由组件的构建方式、组件内的状态属性与生命周期方法组成 React.cr...

  • React概念

    React 的核心思想是:封装组件。各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件。 React...

  • react的受控组件和非受控组件

    受控组件就是可以被 react 状态控制的组件在 react 中,Input textarea 等组件默认是非受控...

网友评论

      本文标题:React的多组件状态提升案例

      本文链接:https://www.haomeiwen.com/subject/jydcnktx.html