ReactJS - 04 - ReactJS之入门之02之 Component 组件元素的状态
前面已经讲到,组件元素被解析后的本质是一个 javascript DOM 对象。但是它只作为这个组件的一部分:作为结果的输出。
组件元素还有其它的属性,例如:state 属性,就是本节要讨论的。
一、元素组件的 this.state 属性
ReactJS 里,只需更新组件的 state 属性,它就会根据新的 state ,重新渲染用户界面(不需要操作 DOM)—— 达到动态更新的目的。
注意:
更新 state 属性应使用 ReactJS 提供的:setSate() 方法。
二、举例
1、使用 this.state 属性
以下实例创建一个类,继承 React.Component 。在 render() 方法中使用 this.state ,用以来修改当前的时间。
<script type="text/babel">
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
// 使用 setState() 方法更新 state 属性。
setInterval(()=>{
this.setState({
date: new Date()
});
}, 1000);
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>现在是 {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('example')
);
</script>
2、了解组件元素的生命周期函数:componentDidMount() / componentWillUnmount()
在具有许多组件的应用程序中,在组件销毁时,释放组件所占用的资源非常重要。
上面的写法虽然实现了基础的功能性要求,但是却存在一个问题:如果组件被移除之后,interval 方法仍在持续运行。这是不行的,内存会占有越来越多。
componentDidMount(): 在 React 中被称为挂载,于组件第一次加载到 DOM 中的时候执行。
componentWillUnmount(): 在 React 中被称为卸载,于组件生成的 DOM 被移除的时候执行。
优雅的写法:
<script type="text/babel">
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID =
setInterval(() => {
this.setState({
date: new Date()
});
}, 1000);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>现在是 {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('example')
);
</script>
3、多个组件嵌套,组件的更新问题 —— 组件中数据的共享及流向
组件的状态(this.state)真好用啊,它可以使组件动态的更新内容。但是,如果一个组件由多个子组件组成的时候呢?而子组件又使用了顶层组件的属性。此时若顶层组件的属性发生变化,也需要子组件更新其 state 属性吗?
回答:不必这么麻烦。
这得益于 ReactJS 中数据是自顶向下单向流动的。任何状态始终由某个特定组件所有,但可被其子组件所共享,并且从该状态导出的任何数据或 UI 会且只会影响组件树中下方组件的状态的更新。
方法:
父组件中:使用 state 作为子组件的 props 属性将值传递到子组件上。
子组件中:1.如果子组件是单纯的 function,则可以直接使用 props.xxx
2. 如果子组件继承了 React.Component,则使用 this.props.xxx
下例中父组件 Clock 包含一个子组件 FormattedDate。由于父组件 Clock 的 state 属性被(导出)子组件引用,此时只需更新父组件的 state 属性值,子组件渲染的页面就会得到相应的更新。
<script type="text/babel">
//子组件 1
function FormattedDate1 (props) {
return <h2>现在是 {props.date.toLocaleTimeString()}.</h2>;
}
//子组件 2
class FormattedDate2 extends React.Component {
render() {
return (
<h2>现在是 {this.props.date.toLocaleTimeString()}.</h2>
);
}
}
//父组件
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID =
setInterval(() => {
this.setState({
date: new Date()
});
}, 1000);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<FormattedDate1 date={this.state.date} />
<FormattedDate2 date={this.state.date} />
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('example')
);
</script>
在线测试
转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2429343
-
- 大小: 42.9 KB
分享到:
相关推荐
React 组件启动器组件描述在这里演示和示例现场演示:链接到现场演示要在本地构建示例,请运行: npm installgulp dev然后在浏览器中打开 。安装使用 My-Component 的最简单方法是从 NPM 安装它并将其包含在您自己的...
本教程将带你逐步入门ReactJS,了解其核心概念,并通过实际案例进行实践。 一、ReactJS基础 1. 组件化开发:ReactJS的核心理念是组件,它允许开发者将UI拆分成独立、可重用的部分,每个部分称为组件。组件可以像...
垂直时间轴分量React生成响应式垂直时间轴的简单组件地位入门安装为npm依赖项npm install --save vertical-timeline-component-reactAPI文档时间线这是创建垂直时间轴的包装器组件。 孩子们的儿童数量必需的允许值...
远程组件入门套件 使用Webpack创建一个远程组件 创建React App(CRA) 使用Next.js进行服务器端渲染 getServerSideProps 从Next.js调用getServerSideProps 这个怎么运作 内容安全政策(CSP) 备择方案 路线图 ...
入门使用 NPM 安装: $ npm install react-data-table-component styled-components然后安装 data-table-extensions 扩展。 $ npm install react-data-table-component-extensions用法现场演示特征以 *.csv 和 *.xls...
### React.js零基础入门知识点详解 #### 一、React.js简介 React.js 是一个由 Facebook 开发并维护的用于构建用户界面的 JavaScript 库。它主要用于构建 Web 和移动应用的 UI 层,虽然通常被误认为是 MVC 框架的一...
FusionCharts JavaScript图表库的一个简单轻巧的官方React组件。 react-fusioncharts使您可以轻松地在React应用程序或项目中添加JavaScript图表。 Github回购: : 文档: : 支持: : 融合图 官方网站: : ...
在本项目"react-credit-card-component-starter"中,我们将探讨如何使用React.js构建一个信用卡输入组件,并通过Parcel Bundler进行打包。这是一个非常适合初学者的教程项目,它将引导你了解React开发的基本流程,...
ReX React UI组件:rex-react-component-starter-kit 该项目是ReX设计语言的一部分,可用于创建React UI组件。 有关更多信息,请访问: Github NPM 它是如何建造的 构建工具:webpack 4 代码库:Bootstrap项目...
:globe_showing_Americas: 演示版 :fire: 入门npm i --save-dev @khriztianmoreno/storybook-addon-raw-styled-component :memo: 注册插件在.storybook目录中创建一个名为addons.js的文件,并添加以下内容: // ....
入门套件React组件发布用于将React成分发布到npm和yarn的入门工具包 :up_arrow: 如何设定步骤1: git克隆此仓库步骤2:使用npm install或yarn install安装应用程序步骤3:准备自定义 :up_arrow: 如何进行开发测试...
在这个"react入门实例"中,我们将深入探讨React的基础知识,包括设置环境、创建组件、状态管理和生命周期方法等。 首先,让我们从安装React开始。React并不直接提供一个完整的框架,而是作为一个库来使用。你可以...
:sparkles: Web应用程序上用于用户入门的React Component库(导览或说明演练),以提高使用率并降低首次交互时用户的流失率。 | | 安装 npm install react-user-onboarding yarn add react-user-onboarding 用法 ...
React Component信用卡- 一个简单的React组件信用卡入门$ git clone -o your-component -b master --single-branch https://github.com/descomplica/react-credit-card.git your-component浏览器支持我们确实在乎。...
用LernaReact组件库 构建自己的由lerna管理并随故事书一起呈现的React组件库。 产品特点 支持 :atom_symbol: 集成附带示例 :books: 使用组件构建的示例 :nail_polish: , 和和集成 :joker: 和测试 [内置cli]:...
react-windows-ui 使用reactjs构建功能齐全的Windows流利UI应用程序。演示版 :high_voltage: 安装npm install react-windows-ui --save入门import { NavBar , NavPageContainer , . . } from 'react-windows-ui' // ...
React翻译器组件 用于开发多语言项目的React语言翻译模块。 入门 使用NPM安装: $ npm install react-translator-component 用法 现场演示 相当简单易用; 进行翻译器配置。 在T(text)函数中包括文本内容。 ...
React自定义轮播组件 入门 import React from "react" ; import ReactDOM from "react-dom" ; import Carousel from "./components/Carousel.jsx" ; const items = [ { name : "First slide" , imageURL : "" , ...
3. ReactJS基础:组件化开发,状态管理和props,生命周期方法。 4. React Hooks:利用useState和useEffect实现无状态组件和副作用管理。 5. React Native入门:环境配置,创建第一个React Native应用,理解原生组件...