美文网首页
React学习回顾(第六节)

React学习回顾(第六节)

作者: 不敢大声说话的web小萌新 | 来源:发表于2019-05-07 15:56 被阅读0次

第六节 React 中的 state

前端时间看到掘金里面诟病state 的设计,作为一个初学者似懂非懂。在后面的写法中我严格遵守一些规则来使用state,避免state的一些缺陷。

React 中提供了state 属性让我们获取里面的数据,同时改变里面的数据用setState()这个方法对数据进行修改

class MyApp extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            userList: ['张三','李四','王五']
        }
    }
    render(){
        return (
            <div>
                <List userList={ this.state.userList }/>
            </div>
        )
    }
}
class List extends React.Component{
    render(){
        console.log(this);
        return(
            <div>
                <ul>
                    {
                        this.props.userList.map( (item,index)=>{
                            return <li key={index}>{item}</li>
                        })
                    }
                </ul>
            </div>
        )
    }
}
ReactDOM.render(<MyApp />,document.getElementById('app'));

我通过了state存放数据并给了子组件。

我现在来做一个添加修改state 里面的数据。创建一个按钮绑定一个事件。

class MyApp extends React.Component{
    constructor(props){
        super(props);
        this.addRandom = this.addRandom.bind(this); //注意
        this.state = {
            userList: ['张三','李四','王五']
        }
    }
    addRandom(){
        let name = '哈皮' + Math.floor(Math.random()*100);
        this.setState( (pre) => {   //注意
            return{
                userList: pre.userList.concat([name])
            }
        })
    }
    render(){
        return (
            <div>
                <List userList={ this.state.userList }/>
                <button onClick={ this.addRandom }>addRandom</button>
            </div>
        )
    }
}
class List extends React.Component{
    render(){
        console.log(this);
        return(
            <div>
                <ul>
                    {
                        this.props.userList.map( (item,index)=>{
                            return <li key={index}>{item}</li>
                        })
                    }
                </ul>
            </div>
        )
    }
}
ReactDOM.render(<MyApp />,document.getElementById('app'));

上面的代码有两个分别表示了两个注意 ==>

第一个注意是将组件的this 绑定进去

如果不绑定进去,我们在点击的时候,是被window 调用,那么this 指向的是window,我们使用的babel转的是严格模式,那么this 指向的是一个空对象。

第二个注意是我们说了sate 被诟病的问题,state 是异步的一个操作。可以分别写入两个console进行测试,官方文档中要求禁止直接改变state原来的值,所以我们选择了数组合拼的方法进行处理。


相关文章

网友评论

      本文标题:React学习回顾(第六节)

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