React事件、函数式声明组件、有状态组件

本文深入探讨了React中事件处理的多种方式,包括直接调用、通过bind传递参数及函数内调用函数的方法。同时,文章详细介绍了React组件的创建与使用,包括声明式组件的es5与es6语法,以及有状态组件的state更新机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件

  • react的事件到底常不常用我也不清楚,因为js里是能不用行内事件就坚决不用行内事件,但是既然html里有事件这一属性,那么react实现其功能也是无可厚非的。

事件触发调用函数

  • 利用好插值符号,因为插值符号里就是给你写js的地方;
<script type="text/babel">
    function alertThis() {
        alert("Clicked once");
    }
    //事件属性是用驼峰命名规则,记着就不用翻api了
    const element = (
        <div>
            <input type="button" defaultValue="测试" onClick={alertThis}/>
        </div>
    );
    ReactDOM.render(
        element,
        document.getElementById('app')
    );
</script>

React给事件函数传递参数

  • 通过bind:
<script type="text/babel">
    function alertThis(pa) {
        alert("Clicked once and get parms:"+pa);
    }
    const element = (
        <div>
            <input type="button" defaultValue="测试" onClick={alertThis.bind(this,"参数")}/>
        </div>
    );
    ReactDOM.render(
        element,
        document.getElementById('app')
    );
</script>
  • 通过函数调用函数:

因为插值符号里可以执行js代码,而不仅限于调用函数,所以,实际应用中react的渲染带动的事件和相关代码可以非常强大。

<script type="text/babel">
    function alertThis(pa,event) {
        alert("Clicked once and get parms:"+pa+"事件:"+ event.type);
    }
    const element = (
        <div>
            <input type="button" defaultValue="测试" onClick={function(e) {
                alertThis("参数",e)                   
            }}/>
        </div>
    );
    ReactDOM.render(
        element,
        document.getElementById('app')
    );
</script>

React组件

  • 声明式组件:

es5函数声明


function Welcome(props) {
   return <h1>Hello, {props.name}</h1>;
}

es6函数声明

class Welcome extends React.Component {
	constructor(){
		super();//如果使用了构造函数,一定要显示的调用父级的构造函数,不然会报错。	
	}
    render() {
        return <h1>Hello, {this.props.name}</h1>;
    }
}
  • 使用组件:
const element = <Welcome name="Sara" />;
ReactDOM.render(
    element,
    document.getElementById('app')
);

在这里插入图片描述

组件最大的特点,高复用性!,你可以重复使用组件,非常的爽,非常的方便!

有状态的组件

  • state,用数据驱动视图,后台发送的数据都是用状态保存,为的就是有状态渲染。
<script type="text/babel">
    class Welcome extends React.Component {
        constructor(){
            super();//如果使用了构造函数,一定要显示的调用父级的构造函数,不然会报错。

            this.state ={
                name:"Bob"
            }
            setTimeout(() => {
                this.setState({
                    name:"Lucy"
                })
            }, 3000);
        }
        render() {
            return <h1>Hello, {this.state.name}</h1>;
        }
    }
    const element = <Welcome name="Sara" />;
    ReactDOM.render(
        element,
        document.getElementById('app')
    );
    //我这里设置了一个定时器检测状态的改变
    setInterval(() => {
		console.log(document.getElementById('app').firstChild.innerHTML)
    }, 1000)
</script>

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的飞牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值