ref和事件绑定

一:state状态

1·1:函数组件使用状态

函数组件不能使用状态 ,后期会学习其他技术来让函数组件可以使用状态

1·2:类组件使用状态

定义:this.state={}

获取:this.state.xxx

修改: this.setState({ },( )=>{ })

    class Mycon extends React.Component {
        constructor(props) {
            super(props)
            this.state = {
                text: "你好,我是states里面的数据"
            }
        }
        
        update=()=>{
            this.setState({
                text:"修改以后的值"
            },
            // 可以通过添一个回调函数来获取异步操作里的值
            ()=>{
               console.log("异步操作里"+this.state.text) 
            })
            console.log("同步操作里"+this.state.text) 
        }

        render() {
            return (
                <div>
                    <h1>state的使用,状态使用</h1>
                    {/*不需要重新渲染,state里面的值会重新自动渲染*/}
                    <h4>{this.state.text}</h4>
                    <button onClick={this.update}>点击修改</button>
                </div>
            )
        }

    }


    ReactDOM.render(<Mycon/>,document.getElementById("demon"))

1·2·1:setState()调用了之后干了什么事情?

  • setState()是异步的
  • 自动触发render函数的重新渲染
// 修改state
this.setState({
    text:"你好么么哒"
  },()=>{
    //修改以后的数据
    console.log("回调中的打印"+this.state.text)
 })
//原始数据,没有被修改
 console.log(this.state.text)

1·2·2:插入字符串html

使用dangerouslySetInnerHTML={{–html:值}}

  <div>
    <h1>解析字符串标签</h1>   
    <div dangerouslySetInnerHTML ={{_ _html:this.state.html}}></div>

二:ref

2·1:ref的作用

ref的作用是标识组件内部的元素

(也就是说ref可以用来操作dom元素)

ref属性不能应用于函数组件上,因为他们没有实例

2·2:ref的三种使用方法

a:使用字符串

使用ref=“自定义名字”绑定dom

使用this.refs.自定义名字.XXX 修改dom元素样式

 funa = () => {
      this.refs.demona.style.color="red"
	}

   <h1 ref="demona" onClick={this.funa}>ref的主要作用是操作dom元素的</h1>


    ReactDOM.render(<MyCom />, document.getElementById("demon"))

b:使用回调函数(官方推荐)

使用ref={(xiaoming)=>{this.xianghong=xiaoming}}绑定dom

使用 this.xianghong.XXX 修改dom元素样式

 funb = () => {
            this.xianghong.style.backgroundColor="yellow"  
        }
  
<h1 ref={(xiaoming)=>{this.xianghong=xiaoming}} onClick={this.funb}>使用回调函数来操作dom</h1>

c:React.createRef( )

使用ref={this.自定义名字}绑定dom

在constructor里使用this.自定义名字=React.createRef()进行定义

使用his.自定义名字.current.XXX 修改dom元素样式

class MyCom extends React.Component {
        constructor(props) {
            super(props)  
            this.demonref=React.createRef()
        }
      func = () => {
            this.demonref.current.style.backgroundColor="yellow" 
        }

<h1 ref={this.demonref} onClick={this.func}>使用createRef来操作dom</h1>   

三:受控组件

React负责渲染表单的组件。

同时仍然控制用户后续输入时所发生的变化。

值是来自于state控制的 输入表单元素称为“受控组件”。

四:事件处理

React事件绑定属性的命名采用小驼峰式写法。绑定函数的过程中不加() 否则函数会立即执行

阻止默认行为,冒泡等行为与js原生相同

React中阻止默认行为使用preventDefault();

4·1:绑定事件的方式有四种

a:箭头函数的创建

 funa = () => {
            this.setState({
                text: "我是通过箭头函数被修改的"
            })
        }
  <h5>事件绑定的第一个方法---{this.state.text}</h5>
  <button onClick={this.funa}>点击我修改</button>

b:事件调用的写法改为箭头函数的形式

funb = function () {
            this.setState({
                text: "我是通过点击事件的箭头函数被修改的"
            })
        }
 <h5>事件绑定的第二个方法---{this.state.text}</h5>
<button onClick={() => { this.funb() }}>点击我修改</button>

c:通过bind方法进行原地绑定

 func = function () {
            this.setState({
                text: "我是通过bind方法修改的"
            })
        }
 <h5>事件绑定的第三个方法---{this.state.text}</h5>
 <button onClick={this.func.bind(this)}>点击我修改</button>

d:在constructor中提前对事件进行绑定

 class MyCom extends React.Component{
       constructor(props){
        super(props)
        this.state={text:"我是变量"}
   //提前对事件进行绑定        
 this.fund=this.fund.bind(this)
       
       }   
 fund=function(){
       this.setState({
       text:"我被修改了4"
     })
  }

<button onClick={this.fund}>点我修改</button>

4·2:绑定事件传参数到函数中有两种方式

a:bind传递

 class MyCom extends React.Component{
                constructor(props){
                    super(props)
                    this.state={
                        text:"我是变量"
                    }
		}
      fun=(a,b)=>{
                    console.log(a+"---"+b)
              }
   render(){
         return (
            <div>
            <button onClick={this.fun.bind(this,"形参1","形参2")}>点我传递实参</button>       
              </div>
              )
}  

b:箭头函数的回调函数传参

 class MyCom extends React.Component{
                constructor(props){
                    super(props)
                    this.state={
                        text:"我是变量"
                    }
		}
      funb=(a,b)=>{
                    console.log(a+"---"+b)
                }
   render(){
         return (
            <div>
  <button onClick={()=>{this.funb("参数1","参数2")}}>通过箭头函数调用函数的</button>    
              </div>
              )
} 

五:条件渲染

5·1:if的方式

在React中使用if语句条件渲染是最简单的,但是注意jsx中不允许有if

  render() {
            let el;
            if (false) {
                el = (<li>哈哈哈哈</li>)
            }
            else {
                el = (<li>嘎嘎嘎嘎嘎</li>)
            }
            return (
                <div>
                    {el}
                </div>
            )
}

5·2:三目运算符方式

 {false? <p>您好</p>:  <p>您坏</p>}

六:脚手架模式

create-react-app安装

npm install -g create-react-app 安装脚手架

create-react-app --version 查看版本

create-react-app 项目名 创建项目

cd 项目名 切换到创建好的项目中

           <div>
                {el}
            </div>
        )

}




## 5·2:三目运算符方式

```js
 {false? <p>您好</p>:  <p>您坏</p>}

六:脚手架模式

create-react-app安装

npm install -g create-react-app 安装脚手架

create-react-app --version 查看版本

create-react-app 项目名 创建项目

cd 项目名 切换到创建好的项目中

npm start 启动运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值