React 手稿 - Component state
Component state
实例:
- import React, { PureComponent } from 'react';
- export default class extends PureComponent {
- constructor(props) {
- super(props);
- this.state = { time: '' };
- }
- componentDidMount() {
- setInterval(() => {
- const now = new Date();
- let { time } = this.state;
- const year = now.getFullYear();
- const month = now.getMonth() + 1;
- const day = now.getDate();
- const hours = now.getHours();
- const minutes = now.getMinutes();
- const seconde = now.getSeconds();
- time =
${
0000${year}.slice(-4)}-${
00${month}.slice(-2)}-${
00${day}.slice(-2)} ${
00${hours}.slice(-2)}:${
00${minutes}.slice(-2)}:${
00${seconde}.slice(-2)}
- this.setState({ time });
- }, 1000);
- }
- render() {
- return (
- <div>{this.state.time}</div>
- )
- }
- }
定义
写在constructor
函数中,是一个Object
对象。一般情况下需要指定默认值,预防抛undefined
.
使用
在组件中通过访问组件对象属性的方式。直接获取:this.state.time
.
我们通常会先获取state
数据,再渲然到页面,例如:
- render() {
- const {time} = this.state;
- return (
- <div>{time}</div>
- );
- }
setState
先看一段代码:
- import React, {PureComponent} from 'react';
- export default class extends PureComponent {
- constructor(props) {
- super(props);
- this.state = {name: 'world'};
- }
- render() {
- const {name} = this.state;
- return (
- <div>
- <input defaultValue={name} name="name" />
- <div>Holle, {name}!</div>
- </div>
- );
- }
- }
数据单和向性
input
与div
中直接显示name
的内容,但是,在input
中直接输入内容,div
的显示不会改变。把这种组件也称为非受控性组件。
setState
通过React提供了
setState
方法,来实现state
的修改。我们只要将上述的非受控性组件修改为受控性组件即可,如下:
- <input value={name} onChange={e => this.setState({name: e.target.value})} />
使用
setState
方法需要注意以下几点:异步
- onChange () {
- this.setState({name: 'hasChanged'})
- console.log(this.state.name === 'hasChanged'); //false
- }
- onChange () {
合并
- this.state = {name: 'xiaoshouyi', address: 'beijing'};
- this.setState({address: 'xi an'});
- //not
- //this.setState({...this.state, addree: 'xi an'});
- //但是这种方式在对象修改的时候非常有用。
- console.log(this.state) //{name: 'xiaoshouyi', address: 'xi an'}
类似与
Object.assgin()
。回调
- this.setState({name: 'changed'}, () => {
- console.log(this.state.name); // changed
- });
- this.setState({name: 'changed'}, () => {
推荐阅读《React 手稿》
原文地址:https://segmentfault.com/a/1190000016946490
React 手稿 - Component state的更多相关文章
- React手稿之State Hooks of Hooks
React Hooks React在16.7.0-alpha.0版本中提到了Hooks的概念,目前还是Proposal阶段. 官方也陈述,接下来的90%的工作会投入到React Hooks中. 从目前 ...
- [React] Update Component State in React With Ramda Lenses
In this lesson, we'll refactor a React component to use Ramda lenses to update our component state. ...
- React手稿之 React-Saga
Redux-Saga redux-saga 是一个用于管理应用程序副作用(例如异步获取数据,访问浏览器缓存等)的javascript库,它的目标是让副作用管理更容易,执行更高效,测试更简单,处理故障更 ...
- 说说React组件的State
说说React组件的State React的核心思想是组件化的思想,应用由组件搭建而成, 而组件中最重要的概念是State(状态). 正确定义State React把组件看成一个状态机.通过与用户的交 ...
- React组件的State
React组件的State 1.正确定义State React把组件看成一个状态机.通过与用户的交互,实现不同状态,然后渲染UI,让用户界面和数据保持一致.组件的任何UI改变,都可以从State的变化 ...
- [React] Compound Component (React.Children.map & React.cloneElement)
Imaging you are building a Tabs component. If looks like: <Tabs> <TabList> <Tab> o ...
- [React] Keep Application State in Sync with Browser History
Using pushState and passing route data via context allows our application to respond to route change ...
- React 修改获取state中的值
14===> 修改state中的值 不能够直接修改 state = { num: 10 } 如 this.state.num+=12; 不能够直接修改 错误 通过 this.setState({ ...
- React手稿 - Context
Context Context提供了除props之外的传参数的方式. Context是全局跨组件传递数据的. API React.createContext ``` const {Provider, ...
随机推荐
- VMware 12安装CentOS 6.9时出现:The centos disc was not found in any of your drives.Please insert the centos disc and press OK to retry
错误: The centos disc was not found in any of your drives.Please insert the centos disc and press OK t ...
- innodb_support_xa=1
mysql> show create table t; CREATE TABLE `t` ( `id` ) NOT NULL AUTO_INCREMENT, `num` ) DEFAULT NU ...
- C# SortedDictionary<TKey, TValue> 类
表示依据键进行排序的键/值对的集合. https://msdn.microsoft.com/zh-cn/library/f7fta44c.aspx
- android中图型的阴影效果(shadow-effect-with-custom-shapes)
思路: 在自己定义shape中添加一层或多层,并错开.就可以显示阴影效果.为添加立体感,button按下的时候,仅仅设置一层.我们能够通过top, bottom, right 和 left 四个參数来 ...
- 有一种蓝叫 APEC 蓝
有如是解释 APEC 者--Air Pollution Eventually Controlled. 有说此次是继零八后的重新万国来朝.丝路大略明白了,西域必通. 站在历史的远处回眸,这是继零八年后重 ...
- 初探boost之noncopyable学习笔记
noncopyable 功能 同意程序轻松实现一个不可复制的类. 需包括头文件 #include<boost/noncopyable.hpp> 或 #include<boos ...
- MySQL调优 —— Using temporary
DBA发来一个线上慢查询问题. SQL例如以下(为突出重点省略部分内容): select distinct article0_.id, 等字段 from article_table article ...
- LightOJ--1152--Hiding Gold(二分图奇偶建图)(好题)
Hiding Gold Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Submit Sta ...
- Java中的命名规范到底是怎样的
内容摘要:命名规范二,java中的方法名,对象名和字段名的第一个单词的首写字母应该小写,而后面的每个单词的首字母都应该小写 要想将java基础学的十分的牢固就必须将java中的命名规范掌握好了.俗话说 ...
- A - Translation
Problem description The translation from the Berland language into the Birland language is not an ea ...