React:

React详解:

安装react 脚手架工具:

npm install -g create-react-app

create-react-app 项目名称

cnpm react-dom -install -S 安装专门进行DOM操作的最主要的应用场景,即ReactDOM.render()

<script type=”text/babel”>

react相关的模板写在其中。

</script>

2:

允许直接在模板中插入javascript变量,如果变量是一个数组,则会展开这个数组的所有成员。

例如:

var arr = [

<h1>Hello world!</h1>,

<h2>React is awesome</h2>,];

ReactDOM.render(

<div>{arr}</div>,

document.getElementById('example'));

3 :组件:

React 允许将代码封装成一个组件,最后在网页中插入这个组件。使用React.createClass():

var HelloMessage = React.createClass({

render: function() {

return <h1>Hello {this.props.name}</h1>;

}});

ReactDOM.render(

<HelloMessage name="John" />,

document.getElementById('example'));

所有的组件类都必须有自己的render方法,用于输出组件。

注意:1 组件类的第一个字母必须大写. 2 组件类必须只能包含一个顶层标签。

组件在使用时可以加上任何属性,  同时组件的属性可以通过this.props 对象上获取。

添加组件属性需要注意的地方: 1 class属性需要写成className。For属性需要写成htmlFor  主要是因为class和for属性是JavaScript的保留字。

二:this.props.children 属性:表示组件的所有子节点。通过this.props.children属性可以访问到组件的所有子组件的相关属性。

如果当前组件没有子节点:this.props.children 的值为undefined

如果当前组件只有一个子节点: this.props.children的数据类型为object

如果当前组件有多个子节点 那么this.props.children数据类型就是Array.

PropTypes属性 :该属性用于验证当别人使用组件时,提供的参数是否符合要求。

示例:  该组件要求title属性必须是string类型的,且是必须要填写的。

var MyTitle = React.createClass({

propTypes: {

title: React.PropTypes.string.isRequired,

},

render: function() {

return <h1> {this.props.title} </h1>;

}});

getDefaultProps方法可以用来设置组件属性的默认值。

示例:

var MyTitle = React.createClass({

getDefaultProps : function () {

return {

title : 'Hello World'

};

},

render: function() {

return <h1> {this.props.title} </h1>;

}});

ReactDOM.render(

<MyTitle />,

document.body);

上述渲染出来的结果是默认设置的Hello World

三 获取真实的DOM节点:

通过ref属性来获取。

示例:

var MyComponent = React.createClass({

handleClick: function() {

this.refs.myTextInput.focus();

},

render: function() {

return (

<div>

<input type="text" ref="myTextInput" />

<input type="button" value="Focus the text input" onClick={this.handleClick} />

</div>

);

}});

ReactDOM.render(

<MyComponent />,

document.getElementById('example'));

通过this.refs.[refName] 属性 来读取到真正的DOM节点。

React组件支持除了click事件之外的许多其他组件, 例如 KeyDown Copy Scroll 等  详细的React事件 可访问:

https://reactjs.org/docs/events.html#supported-events

四:this.state:

组件开始有一个初始的状态,然后用户互动,导致状态的变化,从而触发重新渲染UI。

示例:

var LikeButton = 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(

<LikeButton />,

document.getElementById('example'));

首先通过getInitialState方法用于定义初始状态。通过this.state属性读取值。通过this.setState方法就可以修改状态的值。 每次修改以后通过this.render()方法重新渲染组件。

This.props 和this.state的主要区别在于:this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

五:表单:

用户在表单填入的内容属于用户跟组件的互动。所以不能够使用this.props读取。

示例:

var Input = React.createClass({

getInitialState: function() {

return {value: 'Hello!'};

},

handleChange: function(event) {

this.setState({value: event.target.value});

},

render: function () {

var value = this.state.value;

return (

<div>

<input type="text" value={value} onChange={this.handleChange} />

<p>{value}</p>

</div>

);

}});

ReactDOM.render(<Input/>, document.body);

上述表单中,定义一个onChange事件的回调函数,通过event.target.value读取用户输入的值。textarea,select,radio 元素都属于这种情况。

六:组件的生命周期:

首先组件的生命周期分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实 DOM

同时React 为每个状态都提供了两种处理函数: will 函数在进入状态之前调用。did函数在进入状态之后调用。

componentWillMount()

componentDidMount()

componentWillUpdate(object nextProps, object nextState)

componentDidUpdate(object prevProps, object prevState)

componentWillUnmount()

此外 React 还提供了两种特殊状态的处理函数。

  • componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
  • shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

示例:

var Hello = React.createClass({

getInitialState: function () {

return {

opacity: 1.0

};

},

componentDidMount: function () {

this.timer = setInterval(function () {

var opacity = this.state.opacity;

opacity -= .05;

if (opacity < 0.1) {

opacity = 1.0;

}

this.setState({

opacity: opacity

});

}.bind(this), 100);

},

render: function () {

return (

<div style={{opacity: this.state.opacity}}>

Hello {this.props.name}

</div>

);

}});

ReactDOM.render(

<Hello name="world"/>,

document.body);

注意:style属性的设置方式为:

style={{opacity: this.state.opacity}}

七  Ajax请求的数据来源:

组件的数据来源,通常是通过 Ajax 请求从服务器获取,可以使用 componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI 。

请求数据时,在componentDidMount函数中进行。

示例:

var UserGist = React.createClass({

getInitialState: function() {

return {

username: '',

lastGistUrl: ''

};

},

componentDidMount: function() {

$.get(this.props.source, function(result) {

var lastGist = result[0];

if (this.isMounted()) {

this.setState({

username: lastGist.owner.login,

lastGistUrl: lastGist.html_url

});

}

}.bind(this));

},

render: function() {

return (

<div>

{this.state.username}'s last gist is

<a href={this.state.lastGistUrl}>here</a>.

</div>

);

}});

ReactDOM.render(

<UserGist source="https://api.github.com/users/octocat/gists" />,

document.body);

将一个promise对象传入组件:

ReactDOM.render(

<RepoList

promise={$.getJSON('https://api.github.com/search/repositories?q=javascript&sort=stars')}

/>,

document.body);

如果Promise对象正在抓取数据(pending状态),组件显示"正在加载";如果Promise对象报错(rejected状态),组件显示报错信息;如果Promise对象抓取数据成功(fulfilled状态),组件显示获取的数据。

var RepoList = React.createClass({

getInitialState: function() {

return { loading: true, error: null, data: null};

},

componentDidMount() {

this.props.promise.then(

value => this.setState({loading: false, data: value}),

error => this.setState({loading: false, error: error}));

},

render: function() {

if (this.state.loading) {

return <span>Loading...</span>;

}

else if (this.state.error !== null) {

return <span>Error: {this.state.error.message}</span>;

}

else {

var repos = this.state.data.items;

var repoList = repos.map(function (repo) {

return (

<li>

<a href={repo.html_url}>{repo.name}</a> ({repo.stargazers_count} stars) <br/> {repo.description}

</li>

);

});

return (

<main>

<h1>Most Popular JavaScript Projects in Github</h1>

<ol>{repoList}</ol>

</main>

);

}

}});

React框架的基本使用和了解的更多相关文章

  1. 当react框架遇上百度地图

      百度地图官方文档的使用指导是这样说的:在页面中引入<script type="text/javascript" src="http://api.map.baid ...

  2. 谈谈出入React框架踩过的坑

    1 在JSX的元素中写入内联样式,例如<div style={"color:blue"}></div> 报错:warning:Style prop valu ...

  3. 【react】当react框架遇上百度地图

      百度地图官方文档的使用指导是这样说的:在页面中引入<script type="text/javascript" src="http://api.map.baid ...

  4. D3.js(v3)+react框架 基础部分之数据绑定及其工作过程与绑定顺序

    数据绑定: 将数据绑定到Dom上,是D3最大的特色.d3.select和d3.selectAll返回的元素的选择集.选择集上是没有数据的. 数据绑定就是使被选择元素里“含有”数据. 相关函数有两个: ...

  5. 认识React框架

    在大厂面试的时候被问会不会React框架几乎是必须的,可见React框架在现在前端市场的份额.所以说学习React框架的必要性. react框架起源于Facebook的内部项目,因为对市场上的Java ...

  6. 搭建 webpack + react 框架爬坑之路

    由于工程实践需要搭一个 webpack + react 框架,本人刚开始学,就照b站上的react黑马视频做,爬过无数个坑...希望读者能引以为戒.我的是macos系统 https://www.bil ...

  7. 【案例分享】在 React 框架中使用 SpreadJS 纯前端表格控件

    [案例分享]在 React 框架中使用 SpreadJS 纯前端表格控件 本期葡萄城公开课,将由国电联合动力技术有限公司,资深前端开发工程师——李林慧女士,与大家在线分享“在 React 框架中使用 ...

  8. react框架下,在页面内加载显示PDF文件,关于react-pdf-js的使用注意事项

    react框架下,在页面内加载显示PDF文件,关于react-pdf-js的使用注意事项 之前做了一个需求,在注册账号的时候,让用户同意服务条款, 服务条款是一个PDF文件, 这就需要在react内加 ...

  9. React框架随笔

    React框架随笔 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了 ...

  10. React框架概述

    一.React框架概述 官网:https://reactjs.org/       最新版V16.10 中文网:https://zh-hans.reactjs.org/ 中文社区网:https://r ...

随机推荐

  1. ACM学习笔记:二叉堆

    title : 堆 date : 2021-8-3 tags : ACM,数据结构 什么是堆 堆是一棵具有特定性质的二叉树,堆的基本要求是堆中所有结点的值必须大于等于(或小于等于)其孩子结点的值,这也 ...

  2. @ConfigurationProperties实现自定义配置绑定

    @ConfigurationProperties使用 创建一个类,类名上方注解,配置prefix属性,如下代码: @ConfigurationProperties( prefix = "he ...

  3. Blazor+Dapr+K8s微服务之开发环境调试

    1         安装Dapr开发调试环境 1.1         Dapr 完整安装模式不支持开发调试 在上一篇随笔<Blazor+Dapr+K8s微服务之服务调用>中,我们通过为每个 ...

  4. noip29

    T1 以下的LIS代指最长不降子序列. 考场看到取模,便想到了之前写过的Medain,取模操作让序列分布均匀,对应到本题上,既然是求LIS,那它应该是有循环节的,后来打表证实确实是有. 然后,我码了个 ...

  5. 什么是.NET CLI CLR IL JIT GC,它们是如何工作的

    参考网址: https://cloud.tencent.com/developer/article/1432891 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服 ...

  6. UWP App Data存储和获取

    这篇博客介绍如何在UWP开发时,如何存储App Data和获取. App Data是指用户的一些设定,偏好等.例如,App的主题,是否接收推送,离线接收消息等.需要区分下App Data和User D ...

  7. GPRS RTU设备OPC Server接口C# 实现

    通过本OPC Server程序接口可为用户提供以OPC标准接口访问远程GPRS/3G/以太网 RTU设备实时数据的方式.从而方便实现GPRS/3G/以太网 RTU设备与组态软件或DCS系统的对接.本程 ...

  8. wpf 实现印章,公章效果

    能写一些特定外观的控件,是一个做界面开发的程序员的基础技能.基本上,不管你是做web,QT,MFC,Winform,WPF等等,如果自己看到一个比较好看的有趣的效果,能大致推断出它的实现方式并照猫画虎 ...

  9. 异步编程之EAP

    一.概述 前面我们了解到了APM编程模式,但APM不支持对异步操作的取消和没有提供对进度报告的功能. 对于界面程序来说,进度报告和取消操作的支持也是必不可少的,为了支持这些功能,微软在.NET 2.0 ...

  10. 解决log4net多进程日志文件被占用

    <log4net debug="true"> <appender name="RollingLogFileAppender" type=&qu ...