zoukankan      html  css  js  c++  java
  • react中数据承载props和state用法

    react中数据承载

    react中数据承载的两种方式:

    ​ props: 自己可以设置默认属性,也可以从外部传入属性,但是外部传入的属性,自己只能用,不能用来修改

    ​ state: 一般由自己控制,自己可以进行状态的更改。

    props

    函数组件

    函数式组件中:
    通过参数props.xxx获取外部传入的属性值

    <body>    
        <div id="app"></div>
        <script type="text/babel">           
            const App = function(props){
                return (
                    <div>
                        我是app组件! --- { props.username }  --- { props.age+1 } --- {props.sex} --- {props.address}
                    </div>
                )
            }
            let obj = {
                sex:"女"
            }
            let other = {
                address:"贫民窟"
            }
            ReactDOM.render(<App {...other} sex={obj.sex} username={"张三"}  age={10} />,document.getElementById("app"))
        </script>
    </body>
    类组件

    类组件中:
    通过this.props.xxx获取外部传入的属性值

    <body>    
        <div id="app"></div>
        <script type="text/babel">      
            class App extends React.Component{
            render(){
              let {sex,username,age} = this.props;
                     return (
                         <div>
                            我是app组件! --- { username }  --- { age+1 } --- {sex} --- {this.props.address}
                        </div>
                    )
                }
             }        
            let obj = {
                sex:"女"
            }
            let other = {
                address:"贫民窟"
            }
            ReactDOM.render(<App {...other} sex={obj.sex} username={"张三"}  age={10} />,document.getElementById("app"))
        </script>
    </body>

    state

    类组件

    状态一般放在constructor进行定义,在构造函数中进行初始化

    <body>
        
        <div id="app"></div>
        <script type="text/babel">
    
            //举例 计数器案例
            let a = 1
            class Counter extends React.Component{
                //状态一般放在constructor进行定义的
                constructor(){
                    super()
                    this.state = {  //状态通常在构造函数中进行初始化
                        count:1
                    }
                }
    
                handleClick = ()=>{
                    // this.state.count = this.state.count+1
                    // this.forceUpdate() 
    
                    // react中推荐采用setState,就可以实现数据改变,视图更新操作了
                    // setState方法是异步的,如果想要获取更新后的最新状态,需要写在第二个参数中
                    // this.setState({
                    //     count: this.state.count+1
                    // },()=>{
                    //     console.log(this.state.count)
                    // })
    
    
                    // 这种形式的 setState() 也是异步的,并且在同一周期内会对多个 setState 进行批处理,下方的函数执行了三次,但是结果仍是2
                    // Object.assign() 
                    /* this.setState({
                        count:this.state.count+1
                    })
                    this.setState({
                        count:this.state.count+1
                    })
                    this.setState({
                        count:this.state.count+1
                    }) */
    
    
                    // 如果后续状态取决于当前状态,我们建议使用 updater 函数的形式代替
                    // 下方的代码会依次执行
                    // this.setState((prevState)=>{
                    //     return {
                    //         count: prevState.count+1
                    //     }
                    // },()=>{
                    //     console.log(this.state.count)
                    // })
                    // this.setState((prevState)=>{
                    //     return {
                    //         count: prevState.count+1
                    //     }
                    // })
                    // this.setState((prevState)=>{
                    //     return {
                    //         count: prevState.count+1
                    //     }
                    // })
    
                }
    
                render(){
                    return (
                        <div>
                            <p>{this.state.count}</p>    
                            <button onClick={this.handleClick}>更改counter</button>
                        </div>
                    )
                }
            }
    
    
            class App extends React.Component{
                render(){
                    return (
                        <div>
                            <Counter/>    
                        </div>
                    )
                }
            }
    
    
            ReactDOM.render(<App/>,document.getElementById("app"))
        </script>
    </body>

    函数组件

    在函数组件中,我们可以采用 React 16.8 useState 这个hooks来去同时定义一个状态和一个更改状态的方法

    <body>
        
        <div id="app"></div>
        <script type="text/babel">
            const App = props=>{
                //定义了一个状态 count=1
                //定义了一个更改状态的方法 setCount
                const [count, setCount] = React.useState(1);
                const [title,setTitle] = React.useState("hello");
                return (
                    <div>
                        App --- {count} -- {title}
                        <p><button onClick={()=>{setCount(count+1)}}>更改count</button></p>   
                        <p><button onClick={()=>{setTitle('你好')}}>更改title</button></p>   
                    </div>
                )
            }
            ReactDOM.render(<App/>,document.getElementById("app"))
        </script>
    </body>
    请用今天的努力,让明天没有遗憾。
  • 相关阅读:
    9.11练习:文件访问,写一个逐页显示文本文件的程序,提示输入一个文件名,每次显示文本文件的25行,暂停并向用户提示“按任意键继续”,按键后继续执行。
    关于将缓冲器内容写入文件
    关于移动文件指针
    关于file.writelines换行符的添加
    石头剪子布游戏
    关于浅拷贝,深拷贝
    关于list.extend(iterable)
    vs2012编译openssl
    Sublime Text 3 安装及插件推荐
    bower--包管理工具
  • 原文地址:https://www.cnblogs.com/cupid10/p/15617677.html
Copyright © 2011-2022 走看看