React.js 基础入门三 ---组件状态state

React 组件实例在渲染的时候创建。这些实例在接下来的渲染中被重复使用,可以在组件方法中通过 this 访问。唯一一种在 React 之外获取 React 组件实例句柄的方式就是保存React.render 的返回值。在其它组件内,可以使用 refs 得到相同的结果(后面会简单解释refs)。

从上几章的学习,我们可以这么理解组件,学过php的Yii框架的都知道widget组件,react.js定义一个组件,通过在组件中定义各种‘方法‘,‘属性’最后通过render来渲染这个组件。

其中<组建名称 /> 这种形式的调用,类似Yii框架中的$this->widget()来生成视图。

下面来说一下组件的状态:

index.html

<html>
	<head>
		<meta charset="utf-8">
	</head>
	<body>
		 <div id = "app_react"></div>

		 <script src="build/react.js"></script>
		 <script src="build/JSXTransformer.js"></script>
		 <!--此处把react部分的js独立出来了-->
		 <script type="text/jsx" src="index.js" charset="utf-8"></script>
	</body>
</html>

直接上js文件的内容:

index.js

var MessageBox = React.createClass({
	getInitialState :function (){  //此方法是内置方法
		return {
			titles : "碉堡的title!",
			names: ‘蛋疼的名字‘,
			contents:‘asdfghjklzxcvbnmqwertyuiop‘,
		}
	},

	changeState:function(){
		var s = Math.floor(Math.random()*20)
		var e = Math.floor(Math.random()*20)
		this.setState({
			names:this.state.names+this.state.contents.substr(s , e)
		});
	},
	render:function (){
		return (
			<div>
				<h1>This is React.JS</h1>
				<ShowBox/>

				<p><input type="button" onClick={this.changeState} value="尽情的点我"/></p>
				<p>{this.state.titles}</p>
				<p>{this.state.names}</p>
			</div>
		);
	}
});

var ShowBox = React.createClass({
	alertX : function (){
		alert(‘弹弹弹死你们!‘);
	},

	render:function (){
		var styleOptions = {
			width: ‘1000px‘,
			height: ‘100px‘,
			background: ‘#789798‘
		};
		return(
			<div style={styleOptions}>
			</div>
		);
	}
});

var ReactObj = React.render(
	<MessageBox/>,
	document.getElementById(‘app_react‘),
	function(){
		console.log("渲染成功!")
	}

);

讲解:

至于ShowBox组件,就不用多说了,

我们来看看MessageBox组件,getInitialState是React内置的方法,调用的方式是:

{this.state.names}

可以把this.state当做不可变的(只读的),因为在之后调用 setState() 可能会替换掉你做的更改,

如果强制修改,可以用React对象调用forceUpdate()的方法更新更改。

在React render渲染完成后,会返回一个React对象,这个对象会含有所有属性,方法。

众所周知,react.js会渲染整个DOM来更新变化,那么React.js是如何快速高效地执行的呢?

React是很快的,因为它从不直接操作DOM。React在内存中维护一个快速响应的DOM描述。render()方法返回一个DOM的描述,React能够利用内存中的描述来快速地计算出差异,然后更新浏览器中的DOM。

DOM的挂载:

是什么是挂载?  及React组件被渲染到DOM中,只有组件被渲染才可以调用getDOMNode() 方法来获取 本组件渲染后生成的DOM(及可称作 DOM对象), 来修改元素的一些属性。

如果在无渲染组件的时候, 获取一个组件的引用 , 该怎么做?

(类似Yii中 在组件活小部件中 怎么获取当前controller一样)

你可以使用this来得到当前的React组件,或者你可以使用refs来指向一个你拥有的组件

详细件代码:

focusInput:function(){
		var refsNode = this.refs.test_ref.getDOMNode();
		refsNode.focus();
		refsNode.title="90design";
	},
	render:function (){
		return (
			<div>

				<p><input type="text" ref="test_ref" value="测试refs"/></p>  <!--试试可以修改input的值吗!-->
				<p><input type="button" onClick={this.focusInput}  value="点击测试refs" /></p>
			</div>
		);
	}

写的不够详尽,有待改善,请大牛指点一二。

The End!

时间: 2024-08-05 07:07:57

React.js 基础入门三 ---组件状态state的相关文章

React.js 基础入门二--组件嵌套

组件:在设计接口的时候,将常用元素(按钮,表单字段,布局组件等)分解成定义好接口的可重用组件.这样下次你在创建同样界面就可以少写很多代码,这意味着更快的开发时间,更少的bug,和更少的内容下载. 将上章节Index.html中Js部分修改为: <script type="text/jsx">   // 注意此处                 // 定义web组件 (<font color="#ff0000">MessageBox 错误组件嵌

React.js 基础入门四--要点总结

JSX语法,像是在Javascript代码里直接写XML的语法,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码,React 官方推荐使用JSX, 当然你想直接使用纯Javascript代码写也是可以的,只是使用JSX,组件的结构和组件之间的关系看上去更加清晰. 1. HTML 标签 和 React 组件 在JS中写HTML标签,也许小伙伴们都惊呆了,那么React又是怎么区分HTML标签,React组件标签? HTML标签: var myDivEle

React Native基础&amp;入门教程:初步使用Flexbox布局

在上篇中,笔者分享了部分安装并调试React Native应用过程里的一点经验,如果还没有看过的同学请点击<React Native基础&入门教程:调试React Native应用的一小步>. 在本篇里,让我们一起来了解一下,什么是Flexbox布局,以及如何使用. 一.长度的单位 在开始任何布局之前,让我们来首先需要知道,在写React Native组件样式时,长度的不带单位的,它表示“与设备像素密度无关的逻辑像素点”. 这个怎么理解呢? 我们知道,屏幕上一个发光的最小点,对应着一个

Swift语法基础入门三(函数, 闭包)

Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: func 函数名称(参数名:参数类型, 参数名:参数类型...) -> 函数返回值 { 函数实现部分 } 没有参数没有返回值 可以写为 ->Void 可以写为 ->() 可以省略 Void.它其实是一个空的元组(tuple),没有任何元素,可以写成() func say() -> V

react.js从入门到精通(五)——组件之间的数据传递

一.组件之间在静态中的数据传递 从上面的代码我们可以看出,两个组件之间的数据是分离,但如果我们有某种需求,将数据从一个组件传到另一个组件中,该如何实现? 场景设计: 将Home.js中的HomeData传递到MyScreen.js中 import React,{ Component } from 'react' import MyScreen from "./MyScreen"; class Home extends Component { constructor(props) { s

React JS 基础知识17条

1. 基础实例 <!DOCTYPE html> <html> <head> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script&g

React JS快速入门教程

翻译至官方文档<Tutorial>http://facebook.github.io/react/docs/tutorial.html 转载请注明出处:http://blog.csdn.net/adousen 推荐阅读 React|RakNet 博客:http://blog.csdn.net/rsspub/article/category/1435601 在入门教程里,我们会创建一个简单却实用的评论盒子来作为我们的例子,你可以把它放进一个博客什么的.它实际上就是Disqus.LiveFyre.

react学习记录(三)——状态、属性、生命周期

react的状态state React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM) class Clock extends React.Component { constructor(props) { super(props); this.state = {date: new Date()}; } componentDidMount() { this.timerID = setInterval( () => this.tick(), 1000

react.JS基础

1.ReactDOM.render() React.render 是 React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title></title> 6 <script type="text/javascript" src