React.js 别闹-(2)

2017-05-05  本文已影响51人  Transnet2014

一、简介

首先要定位,react 是一个前端视图构件库。虽然涉及底层重写,但仍旧保持在库的层面。用英文描述就是 library,而 Angular 是 Framework 他们自己也称 Platform。

高下立判!

那么作为一个视图构件,他的形态和行为由数据控制,随数据变化。省去了我们找到并通知其修改的过程。实际上,这可不是 React 的专利,大家都在解决这个问题,他追随大家的思潮而已。他脱颖而出,主要依赖“逆工程化”思路。

就是 jsx !

没有 MVC 之前的前端开发,最佳实践告知我们尽量把数据视图分离开,解耦合。便于工程化管理和迭代,在组件化开发中,逆气而行,将 JavaScript HTML 及 CSS 全部封装在一个文件中,并将此文件看做构成项目的最小单元。

还是写个例子比较容易说明问题

点赞

效果图如下

图来自 React.js 小书

相信你有前端基础,这个功能非常简单。于是开始动手

.input-group>.btn-group>(button.btn.btn-default + button.btn.btn-default)

为了实现点击效果,你需要添加一个事件监听来 toggle 状态

$('button').on('click',()=>$(this).toggleClass('like'))

实际实现需要调试修改主要思路就是上边这样了。那么,问题来了。如果你的另外一个项目中同样有这样一个点赞功能,那该如何复用呢?(复制粘贴?fckaw)

其实还是有优化的方向和思路的,比如,我把依赖去掉,把 JavaScript 内联到 HTML 里面,这样,下次使用只需要复制这一整段就行了,看上去像是“畅言”的实现方式。实际上,还是很蠢。

于是有了框架,把最佳实践整合起来解决这个问题。React 就是其中大刀阔斧改革者。

高级复用

JavaScript 放入 HTML 不合适,那HTML 放入 JavaScript 然后用 innerHTML 吐出来如何呢?

class LikeButton {
  render(){
    return `
      <button id="like">
           <span class="like-text">like</span>
      </button>
    `
  }
}

const like1 = new LikeButton()
const like2 = new LikeButton()
wrapper.innerHTML = like1.render()
wrapper.innerHTML = like2.render()

这种古老的声明式 class 方式虽然也解决了复用的问题,但蠢得让人看着难受。

上一篇下一篇

猜你喜欢

热点阅读