Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >React中的-- 数据流

React中的-- 数据流

作者头像
前朝楚水
发布于 2018-04-03 06:27:43
发布于 2018-04-03 06:27:43
1.3K00
代码可运行
举报
文章被收录于专栏:互联网杂技互联网杂技
运行总次数:0
代码可运行

简介

React的组件简单理解起来其实就是一个函数,这个函数会接收propsstate作为参数,然后进行相应的逻辑处理,最终返回该组件的虚拟DOM展现。在React中数据流向是单向的,由父节点流向子节点,如果父节点的props发生了改变,那么React会递归遍历整个组件树,重新渲染所有使用该属性的子组件。那么propsstate究竟是什么?它们在组件中起到了什么作用?它们之间又有什么区别和联系呢?接下来我们详细看一下。

Props

props其实就是properties的缩写,可以理解为组件的属性,你可以使用props给组件传递任意类型的数据(操作起来就像我们在HTML标签内部定义某些自定义属性一样),也可以添加事件处理器,例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//定义属性变量和事件处理方法var myDefineProps = [{ name : "first prop" }];var clickHandler = function(){
    ...
}// 直接设置props<MyComponent myDefineProps = { myDefineProps }  onClick = { clickHandler } />

这里还允许我们使用组件的一个实例方法setProps来设置组件的props,但是需要注意的是,必须在子组件上或者组件树外调用setProps,切勿在组件内部调用this.setProps,例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var myDefineProps = [{ name : "first prop" }];var myComponent = React.render({
    <MyComponent />,    document.querySelector("body")
});// 外部调用setProps设置propsmyComponent .setProps({ myDefineProps : myDefineProps  });

我们可以通过this.props来访问props,但绝对不可以通过这种方式去修改props(理解为this.prop是只读的即可),一个组件绝对不可以自己修改自己的props。我们还可以通过propType去约束规范prop的类型,可以通过getDefaultProps方法设置prop的默认值。(可参见我的上一篇笔记)

State

state是用来描述组件视图状态的。其与props的区别在于,state是随着用户交互而产生变化的状态,props一旦定义就不再发生改变,例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SecondComponent= React.createClass({ 
    getInitialState : function() { 
        return {liked : false}; 
    }, 
    handleClick : function(event) { 
        this.setState({liked : !this.state.liked}); 
    }, 
    render : function() { 
        var text = this.state.liked ? 'like' : 'haven\'t liked'; 
        return ( <p onClick = {this.handleClick}> You {text} this. Click to toggle. </p> ); 
    }
});
ReactDOM.render( <SecondComponent />, document.querySelector("body"));

上例中 getInitialState 方法用于定义初始状态,也就是一个对象,这个对象可以通过 this.state 属性读取。当用户点击组件,导致状态变化,this.setState 方法就修改状态值,this.setState的每次调用都会触发 this.render 方法,进而再次渲染组件。

注意:不可直接修改 this.state,要通过 this.setState 去修改。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 交互设计前端开发与后端程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
react小结
在react中,父组件给子组件传递数据时,就是以上的方式,通过给子组件设置props,子组件获取props中的值便可完成数据传递。 
超然
2018/08/03
6750
【Hybrid开发高级系列】ReactNative(六) —— ReactNative开发技巧总结
        你可以使用我们定制的 cnpm(gzip压缩支持) 命令行工具代替默认的 npm:
江中散人_Jun
2023/10/16
3240
【Hybrid开发高级系列】ReactNative(六) —— ReactNative开发技巧总结
Reactjs 入门基础(二)
如果我们需要向组件传递参数,可以使用 this.props 对象,实例如下:   <body>     <div id="example"></div>     <script type="text/babel">       var HelloMessage = React.createClass({         render: function() {           return <h1>H
用户1197315
2018/01/22
7570
滴滴前端高频react面试题总结
当调用 setState时, React做的第一件事是将传递给setState的对象合并到组件的当前状态,这将启动一个称为和解( reconciliation)的过程。
flyzz177
2022/09/14
4K0
React 入门实例教程
现在最热门的前端框架,毫无疑问是 React 。 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑。 React 起源于 Face
ruanyf
2018/04/12
1.9K0
React 入门实例教程
深入React组件生命周期
上篇博文使用React开发的一些注意要点对React开发的一些重点进行了简单的罗列总结,虽然也提到了React生命周期,但只略微小结,在此单独写篇React生命周期的总结。 在组件的整个生命周期中,随
牧云云
2018/05/02
1.3K0
深入React组件生命周期
React全家桶简介
当前前端开发已经进入以vue、react、webpack为代表的编程2.0时代。在1.0时代,代码是写给机器的;在2.0时代,代码是写给工具的,然后由工具处理后再转给机器。
LIYI
2019/09/02
2K0
React全家桶简介
React 组件 API
合并nextState和当前state,并重新渲染组件。setState是React事件处理函数中和请求回调函数中触发UI更新的主要方法。
陈不成i
2021/07/29
1.4K0
React基础语法
JSX语法中,可以在大括号内放置任何有效的JavaScript表达式。例如2+2、user.firstName或formatName(user)等均是有效的JavaScript表达式。
前端_AWhile
2020/05/18
4.9K0
前端模块化开发--React框架(一): 入门和面向组件编程
React中文官网 一、简介 1、特点 1)Declarative(声明式编码) 2)Component-Based(组件化编码) 3)Learn Once, Write Anywhere(支持客户端与服务器渲染) 4)高效 5)单向数据流 2、React高效的原因 1)虚拟(virtual)DOM, 不总是直接操作DOM 2)DOM Diff算法, 最小化页面重绘 3、相关的js核心库 1)react.js: React的核心库 2)react-dom.js: 提供操作DOM的react扩展库 3)bab
MiChong
2020/09/24
2.2K0
前端模块化开发--React框架(一): 入门和面向组件编程
Vue与React的异同—生命周期(一)
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/79016621
空空云
2018/09/27
1.7K0
React学习(2)——状态、事件与动态渲染 原
    上一篇文章最后说明了组件传入的参数必须是只读的,但是在丰富的前端应用中,页面样式是时时刻刻会发生变化的。在前面的章节中介绍了一个时钟的例子,通过重复调用ReactDOM.render() 来渲染组件:
随风溜达的向日葵
2018/08/15
3K0
react面试题总结一波,以备不时之需
所以,当在React class中需要设置state的初始值或者绑定事件时,需要加上构造函数,官方Demo:
beifeng1996
2022/12/07
6670
前端一面常见react面试题(持续更新中)_2023-02-27
React基于Virtual DOM实现了一个SyntheticEvent层(合成事件层),定义的事件处理器会接收到一个合成事件对象的实例,它符合W3C标准,且与原生的浏览器事件拥有同样的接口,支持冒泡机制,所有的事件都自动绑定在最外层上。
用户10376779
2023/02/27
7480
Reactjs 入门基础(三)
State 和 Props 以下实例演示了如何在应用中组合使用 state 和 props 。我们可以在父组件中设置 state, 并通过在子组件上使用 props 将其传递到子组件上。 在 render 函数中, 我们设置 name 和 site 来获取父组件传递过来的数据。 Props 验证 Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效。 当向 props 传入无效数据时,Ja
用户1197315
2018/01/22
2.9K0
高频react面试题自检
展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是数据的状态。
beifeng1996
2022/11/14
8720
React如何处理事件
以上示例在点击链接时,会报错:Uncaught TypeError: Cannot read property 'setState' of undefined。因为this指向的并不是该组件。所以为了能方便调用当前组件的其他属性或方法,需要将this指向为当前实例
用户1272076
2019/03/27
8870
深入理解React(二) :数据流和事件原理
小时光
2016/10/20
6.6K0
深入理解React(二) :数据流和事件原理
【react】关于react框架使用的一些细节要点的思考
( _(:3 」∠)_给云友们提个建议,无论是API文档还是书籍,一定要多看几遍!特别是隔一段时间后,会有意想不到的收获的) 这篇文章主要是写关于学习react中的一些自己的思考: 1.setStat
啦啦啦321
2018/01/03
2K0
【react】关于react框架使用的一些细节要点的思考
常见react面试题(持续更新中)
每个React组件强制要求必须有一个 render()。它返回一个 React 元素,是原生 DOM 组件的表示。如果需要渲染多个 HTML 元素,则必须将它们组合在一个封闭标记内,例如 <form>、<group>、<div> 等。此函数必须保持纯净,即必须每次调用时都返回相同的结果。
beifeng1996
2022/12/16
2.6K0
相关推荐
react小结
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文