React学习笔记(2)—— React组件、参数及状态的使用

组件
react组件的基本写法如下:

class 自定义名字 extends React.Component{
	render {
		return 要渲染的html内容
	}
}

注意:自定义的名字,必须首字母大写,否则虽然不会报错,自定义标签也不会进行渲染

比如定义一个名字为Huz的组件,显示一个红颜色的"hello react"标签,写法如下:

// 继承react的组件
class Huz extends React.Component{
    render() {
        return <div>
                    <span style={{color: 'red'}}>hello react</span>
                </div>
    }
}
// 将Huz组件挂载到id为app的标签下     
ReactDOM.render(<Huz/>, app)

参数
组件的标签设置属性,可以在该组件的render函数中,通过this.props获取到所有的属性和对应属性的值(通过标签传进来的属性值,只能读取,不能改变),基本示例如下:

class Title extends React.Component {
    render() {
        return (
            <div>
                <span>{this.props.msg}</span>
            </div>
        )
    }
}
ReactDOM.render(<Title msg="hello moto"/>, app)

在这里插入图片描述
这里msg的值是只读的,无法修改。假如我们修改一下msg的值,看看会发生什么:

class Title extends React.Component {
    render() {
        return (
            <div>
                <span>{this.props.msg}</span>
                <br/>
                <button onClick={this.changeval.bind(this)}>change</button>
            </div>
        )
    }
    changeval() {
        this.props.msg = "change value"
    }
}
ReactDOM.render(<Title msg="hello moto"/>, app)

在这里插入图片描述
点击一下click,控制台立马报错:
在这里插入图片描述
提示无法给只读属性“msg”赋值

状态
如果需要动态修改属性值,我们可以用到state,示例如下:

class Huz extends React.Component{
    constructor() {
        super()
        this.state = {
            msg: 'hello react'
        }
    }
    render() {
        console.log(this)
        return <div>
                    <input type="button" value="改变" onClick={this.changeval.bind(this)}/>
                    <br/>
                    <span style={{color: 'red'}}>state.msg: {this.state.msg}</span>
                </div>
    }
    changeval() {
        // this.state.msg = 'changed value' // 改变了msg的值,但不会重新渲染页面
        // 改变
        this.setState({
            msg: 'changed value'
        })
    }
}     
ReactDOM.render(<Huz/>, app)

注意:
1,这里改变state.msg的值需要用到setState函数,不能直接通过赋值语句来修改,通过赋值语句修改不会自动重新渲染页面
2,setState会在合适的时机异步的去修改state的值,并不是立马修改的

发布了51 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/huzhenv5/article/details/103778607
今日推荐