React高级-PropTypes校验传递值及ref的使用

1.PropTypes简单使用

Xiaojiejie.js组件里传递了4个值,有字符串,有数字,有方法,这些都是可以使用PropTypes限制的。在使用需要先引入PropTypes

import PropTypes from 'prop-types'

引入后,就可以在组件的下方进行引用了,需要注意的是子组件的最下面(不是类里边)。

//校验传递值
SmailSmailGirlItem.propTypes = {
  	//content:'默认值'
    content: PropTypes.string,
    index: PropTypes.number.isRequired, //isRequired 必传,不传会报错
    deleteItem: PropTypes.func
}
2.ref的使用方法
2.1.代替原来的e.target.value

以前的案例中,我们写了下面的代码,使用了e.target,这并不直观,也不好看。这种情况我们可以使用ref来进行解决。

inputChange(e){
    this.setState({
        inputValue:e.target.value
    })
}

如果要使用ref来进行,需要现在JSX中进行绑定, 绑定时最好使用ES6语法中的箭头函数,这样可以简洁明了的绑定DOM元素。

<input 
    value={this.state.inputValue} 
    onChange={this.inputChange.bind(this)}
    //关键代码——----------start
    ref={(input)=>{this.input=input}}
    //关键代码------------end
    />

绑定后可以把上边的类改写成如下代码:

inputChange(){
    this.setState({
        inputValue:this.input.value
    })
}

这就使我们的代码变得语义化和优雅的多。但是就我个人的经验来讲,我是不建议用ref这样操作的,因为React的是数据驱动的,所以用ref会出现各种问题。

2.2.ref使用中的坑

比如现在我们要用ref绑定取得要服务的数量,可以先用ref进行绑定。

<ul ref={(ul)=>{this.ul=ul}}>
    {
        this.state.list.map((item,index)=>{
            return (
                <SmailSmailGirl 
                key={index+item}  
                content={item}
                index={index}
                deleteItem={this.deleteItem.bind(this)}
                />
            )
        })
    }
</ul>  

绑定后可以在addList()方法中,获取当前<div>的值.

 addList(){
    this.setState({
        list:[...this.state.list,this.state.inputValue],
        inputValue:''
    })
    //关键代码--------------start
    console.log(this.ul.querySelectorAll('div').length)
    //关键代码--------------end

}

这时候你打开控制台,点击添加服务按钮,你会返现数量怎么少一个?(就是这个坑),其实这个坑是因为React中更多setState是一个异步函数所造成的。也就是这个setState,代码执行是有一个时间的,如果你真的想了解清楚,你需要对什么是虚拟DOM有一个了解。简单的说,就是因为是异步,还没等虚拟Dom渲染,我们的console.log就已经执行了。

那这个代码怎么编写才会完全正常那,其实setState方法提供了一个回调函数,也就是它的第二个函数。下面这样写就可以实现我们想要的方法了。

addList(){
    this.setState({
        list:[...this.state.list,this.state.inputValue],
        inputValue:''
        //关键代码--------------start
    },()=>{
        console.log(this.ul.querySelectorAll('div').length)
    })
    //关键代码--------------end
}

现在到浏览器中查看代码,就完全正常了。

个人博客:Karma‘s Blog
源码地址:传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 360 是 Facebook 推出的一款基于 React 的 VR 开发框架,它能够让开发者使用 React 组件化的思想来构建 VR 应用,并且不需要编写任何 WebGL 或者 Three.js 的代码。React 360 提供了一系列的组件和 API,可以帮助开发者构建出各种 VR 应用,如游戏、教育、演示等。 React 360 Web 是 React 360 的一种运行方式,可以将 VR 应用转化为 Web 应用,在浏览器中直接访问。使用 React 360 Web 开发 VR 应用,需要先安装 React 360 和 Node.js。 安装 React 360: ```bash npm install -g react-360-cli ``` 安装 Node.js:从官网 https://nodejs.org/en/ 下载并安装相应版本。 接下来,可以按照以下步骤使用 React 360 Web: 1. 创建项目 在终端中使用以下命令创建一个 React 360 Web 项目: ```bash react-360 init ProjectName ``` 其中,ProjectName 为项目名称。 2. 编写代码 React 360 Web 的开发方式与 React 开发 Web 应用的方式类似,需要在 index.js 文件中编写代码。以下是一个简单的例子: ```jsx import React from 'react'; import { AppRegistry, StyleSheet, Text, View, } from 'react-360'; export default class MyApp extends React.Component { render() { return ( <View style={styles.panel}> <Text style={styles.greeting}> Hello, React 360! </Text> </View> ); } }; const styles = StyleSheet.create({ panel: { width: 1000, height: 600, backgroundColor: 'rgba(255, 255, 255, 0.4)', justifyContent: 'center', alignItems: 'center', }, greeting: { fontSize: 30, fontWeight: 'bold', color: '#000', }, }); AppRegistry.registerComponent('MyApp', () => MyApp); ``` 3. 运行项目 在终端中使用以下命令运行项目: ```bash npm start ``` 运行成功后,会在浏览器中打开一个地址,例如: ``` http://localhost:8081/index.html ``` 在浏览器中访问该地址,即可看到 VR 应用。 以上是 React 360 Web 的简单使用方法,React 360 提供了丰富的组件和 API,可以满足各种 VR 应用的开发需求。具体的使用方法和 API 可以参考官方文档: https://facebook.github.io/react-360/docs/overview.html

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值