React.js 小书 Lesson3 - 前端组件化(二):优化 DOM 操作
- 作者:胡子大哈
 - 原文链接:http://huziketang.com/books/react/lesson3
 - 转载请注明出处,保留原文链接和作者信息。
 
看看上一节我们的代码,仔细留意一下 changeLikeText 函数,这个函数包含了 DOM 操作,现在看起来比较简单,那是因为现在只有 isLiked 一个状态。由于数据状态改变会导致需要我们去更新页面的内容,所以假想一下,如果你的组件依赖了很多状态,那么你的组件基本全部都是 DOM 操作。
一个组件的显示形态由多个状态决定的情况非常常见。代码中混杂着对 DOM 的操作其实是一种不好的实践,手动管理数据和 DOM 之间的关系会导致代码可维护性变差、容易出错。所以我们的例子这里还有优化的空间:如何尽量减少这种手动 DOM 操作?
状态改变 -> 构建新的 DOM 元素更新页面
这里要提出的一种解决方案:一旦状态发生改变,就重新调用 render 方法,构建一个新的 DOM 元素。这样做的好处是什么呢?好处就是你可以在 render 方法里面使用最新的 this.state 来构造不同 HTML 结构的字符串,并且通过这个字符串构造不同的 DOM 元素。页面就更新了!听起来有点绕,看看代码怎么写,修改原来的代码为:
  class LikeButton {
    constructor () {
      this.state = { isLiked: false }
    }
    setState (state) {
      this.state = state
      this.el = this.render()
    }
    changeLikeText () {
      this.setState({
        isLiked: !this.state.isLiked
      })
    }
    render () {
      this.el = createDOMFromString(`
        <button class='like-btn'>
          <span class='like-text'>${this.state.isLiked ? '取消' : '点赞'}</span>
          <span>												
											React.js 小书 Lesson3 - 前端组件化(二):优化 DOM 操作的更多相关文章
	
								- React.js 小书 Lesson2 - 前端组件化(一):从一个简单的例子讲起
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson2 转载请注明出处,保留原文链接和作者信息. 很多课程一上来就给大家如何配置环境.怎么写 Re ...
		 
						- React.js 小书 Lesson4 - 前端组件化(三):抽象出公共组件类
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson4 转载请注明出处,保留原文链接和作者信息. 为了让代码更灵活,可以写更多的组件,我们把这种模 ...
		 
						- React.js 小书 Lesson17 - 前端应用状态管理 —— 状态提升
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson17 转载请注明出处,保留原文链接和作者信息. 上一个评论功能的案例中,可能会有些同学会对一个 ...
		 
						- React.js 小书 Lesson11 - 配置组件的 props
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson11 转载请注明出处,保留原文链接和作者信息. 组件是相互独立.可复用的单元,一个组件可能在不 ...
		 
						- React.js 小书介绍
		
React.js 小书 Github 关于作者 这是一本关于 React.js 的小书. 因为工作中一直在使用 React.js,也一直以来想总结一下自己关于 React.js 的一些知识.经验.于是 ...
		 
						- React.js 小书 Lesson24 - PropTypes 和组件参数验证
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson24 转载请注明出处,保留原文链接和作者信息. 我们来了到了一个非常尴尬的章节,很多初学的朋友 ...
		 
						- React.js 小书 Lesson22 - props.children 和容器类组件
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson22 转载请注明出处,保留原文链接和作者信息. 有一类组件,充当了容器的作用,它定义了一种外层 ...
		 
						- React.js 小书 Lesson20 - 更新阶段的组件生命周期
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson20 转载请注明出处,保留原文链接和作者信息. 从之前的章节我们了解到,组件的挂载指的是将组件 ...
		 
						- React.js 小书 Lesson19 - 挂载阶段的组件生命周期(二)
		
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson19 转载请注明出处,保留原文链接和作者信息. 这一节我们来讨论一下对于一个组件来说,cons ...
		 
		
	
随机推荐
	
									- Mybitis+springMVC 套路
			
springMVC:确保能够扫描到所有注解 <!-- 使用Annotation自动注册Bean,只扫描@Controller --> <context:component-scan  ...
			 
						- C#模拟进度条
			
自己看源码 using System; namespace ConsoleTest { class Program { static void Main(string[] args) { Consol ...
			 
						- Spring.Net 未将对象引用设置到对象的实例
			
“/”应用程序中的服务器错误. 未将对象引用设置到对象的实例. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详 ...
			 
						- Linux上jmeter-server启动失败
			
Jmeter-server启动失败:Cannot start. Unable to get local host IP address. is a loopback address 在Windows下 ...
			 
						- Luogu2114 [NOI2014]起床困难综合症 【位运算】
			
题目分析: 按位处理即可 代码: #include<bits/stdc++.h> using namespace std; ; int n,m; int a[maxn],b[maxn];  ...
			 
						- CI框架源码学习笔记7——Utf8.php
			
愉快的清明节假期结束了,继续回到CI框架学习.这一节我们来看看Utf8.php文件,它主要是用来做utf8编码,废话不多说,上代码. class CI_Utf8 { /** * Class const ...
			 
						- Opencv图像连通域
			
[摘要] 本文介绍在图像处理领域中较为常用的一种图像区域(Blob)提取的方法——连通性分析法(连通区域标记法). 文中介绍了两种常见的连通性分析的算法:1)Two-pass:2)Seed-Filli ...
			 
						- Android自动化----adb shell,appium,uiautomator2
			
1.区别 1,adb shell脚本的方式 不但可以在有电脑的情况下使用,通过数据线连接电脑然后adb shell命令,而且还可以打包成app,在手机的终端使用adb shell命令. 2,appiu ...
			 
						- C语言中的头文件
			
1.头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找 2.头文件#include "":一般表示用户自己定义使用的头文件,编译器 ...
			 
						- codeforces-473D Mahmoud and Ehab and another array construction task (素数筛法+贪心)
			
题目传送门 题目大意:先提供一个数组,让你造一个数组,这个数组的要求是 1 各元素之间都互质  2  字典序大于等于原数组  3 每一个元素都大于2 思路: 1.两个数互质的意思就是没有公因子.所以每 ...