返回顶部
首页 > 资讯 > 前端开发 > node.js >如何在前端编码时实现人肉双向编译
  • 372
分享到

如何在前端编码时实现人肉双向编译

2024-04-02 19:04:59 372人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关如何在前端编码时实现人肉双向编译,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何在前端编码时实现人肉双向编译React+flu

这篇文章将为大家详细讲解有关如何在前端编码时实现人肉双向编译,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

如何在前端编码时实现人肉双向编译

React+flux是目前最火的前端解决方案之一,但flux槽点颇多,例如store比较混乱,使用比较繁琐等,于是出现了很多第三方的基于flux优化架构

如何在前端编码时实现人肉双向编译

有人统计了目前主流的flux实现方案,感兴趣的可以看这里:Which Flux implementation should I use?

其中redux是目前GitHubstar最多的一个方案,该方案完全独立于react,意味着这套理念可以作为架构层应用于其他的组件化方案。同时官方也提供了react-redux库,帮助开发者直接使用react+redux快速开发。

个人理解它的主要特性体现在以下几点:

  1. 强制使用一个全局的storestore只提供了几个简单的api(实际上应该是4个),如subscribe/dispatch(订阅、发布),getState,replaceReducer

  2. store负责维护一个唯一的叫做state树的对象,其中state存储了应用需要用到的所有数据。

  3. store和顶层组件使用connect方法绑定,并赋给props一个dispatch方法,可以直接在组件内部this.props.dispatch(action)。 简单一点说,就是去掉了flux中组件和storeunbind/bind环节。当state变化时,自动更新components,不需要手动操作。

  4. 提供了applyMiddleware方法用于异步的action,并且提供了加入中间件的能力,例如打印日志追踪应用的所有状态变化。

  5. 对全局的数据state的操作,由多个reducer完成。每个reducer都是一个纯函数,接收两个参数stateaction,返回处理后的state。这点类似管道的操作。

接下来我们可以回答标题的问题了,即:如何在前端编码时实现人肉双向编(zi)译(can)。

其实就是使用coffee来编写react+redux应用。

我们来写个简单的hello world玩玩。

view部分

这部分和redux/flux无关,纯粹react的实现,使用jsx的话,render部分的代码大概长这样:

render:function(){     return (         <div>             <div class="timer">定时器:{interval}</div>             <div>{title}</div>             <input ref="input"><button>click it.</button>         </div>     ) }

那如何使用coffee写这段代码呢? 我们需要先将jsx编译这类似这样的js代码,请注意是用大脑编译:

render:function(){     return React.createElement('div',null,         React.createElement('div',{className:'timer'},'定时器'+this.props.interval),         React.createElement('div',null,this.props.title),         React.createElement('input',{ref:'input'}),         React.createElement('button',null,'click it.')     ); }

然后将js代码逆向编译为coffee。

这里我们可以用$代替React.createElement简化代码(终于可以用Jquery的坑位了),得益于coffee的语法,借助React.DOM可以用一种更简单的方式实现:

{div,input,button,span,h2,h3,h4} = React.DOM

这里就不单独放render部分,直接看完整代码:

{Component,PropTypes} = React = require 'react' $ = React.createElement {div,input,button} = React.DOM  class App extends Component     clickHandle:->         dom = this.refs.input.getDOMnode()         this.props.actions.change(dom.value)         dom.value = ''     render:->         {title,interval} = this.props         div className:'timer',             div null,'定时器:' + interval             div null,title             input ref:'input'             button onClick:@clickHandle.bind(this),'click it.'  App.propTypes =     title: PropTypes.string     actions: PropTypes.object     interval: PropTypes.number  module.exports = App

如果你能看到并看懂这段coffee,并在大脑里自动编译成js代码再到jsx代码,恭喜你。

连接store

这个环节的作用,主要是实现view层和store层的绑定,当store数据变化时,可自动更新view。

这里需要使用redux提供的createStore方法创建一个store,该方法接受2个参数,reducer和初始的state(应用初始数据)。

store.coffee的代码如下:

{createStore} = require 'redux' reducers = require './reducers' # reducer state = require './state' # 应用初始数据  module.exports = createStore reducers,state

然后我们在应用的入口将store和App绑定,这里使用了redux官方提供的react-redux库。

{Provider,connect} = require 'react-redux' store = require './store' $ = React.createElement mapState = (state)->     state rootComponent = $ Provider,store:store,->     $ connect(mapState)(App) React.render rootComponent,document.body

可能有人会问,mapState和Provider是什么鬼?

mapState提供了一个类似选择器的效果,当一个应用很庞大时,可以选择将state的某一部分数据连接到该组件。我们这里用不着,直接返回state自身。

Provider是一个特殊处理过的react component,官方文档是这样描述的:

This makes our store instance available to the components below. (Internally, this is done via React undocumented “context” feature,  but it&rsquo;s not exposed directly in the API so don&rsquo;t worry about it.)

所以,放心的用就好了。

connect方法用于连接state和App,之后即可在App组件内部使用this.props.dispatch()方法了。

添加action和reducer

***我们添加一个按钮点击的事件和定时器,用于触发action,并编写对应的reducer处理数据。

在前面的App内部已经添加了this.props.actions.change(dom.value),这里看下action.coffee的代码:

module.exports =     change:(title)->         type:'change'         title: title     timer:(interval)->         type:'timer'         interval:interval

再看reducer.coffee

module.exports = (state,action)->     switch action.type         when 'change'             Object.assign {},state,title:'hello ' + action.title         when 'timer'             Object.assign {},state,interval:action.interval         else             state

至此,代码写完了。

一些其他的东西

这里只介绍一个中间件的思想,其他的特性例如异步action,或者dispatch一个promise等原理基本类似:

dispatch = store.dispatch store.dispatch = (action)->     console.log action # 打印每一次action     dispatch.apply store,arguments

由于时间关系,redux的一些特性和设计原理没有展现出来,以后有时间再单独讲,完整的项目代码,感兴趣的同学可以看这里:请点我,或者直接找我聊。

项目用到了fis3作为构建工具,使用fis3 release即可在本地查看效果。

关于如何在前端编码时实现人肉双向编译就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在前端编码时实现人肉双向编译

本文链接: https://www.lsjlt.com/news/86174.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在前端编码时实现人肉双向编译
    这篇文章将为大家详细讲解有关如何在前端编码时实现人肉双向编译,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何在前端编码时实现人肉双向编译React+flu...
    99+
    2024-04-02
  • vue codemirror如何实现在线代码编译器
    vue codemirror如何实现在线代码编译器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言如果我们想在Web端实现在线代码编译的效果,那么需...
    99+
    2023-06-22
  • MySQL 5.7.9如何实现源码编译安装
    这篇文章主要介绍了MySQL 5.7.9如何实现源码编译安装,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 一、...
    99+
    2024-04-02
  • Mysql 8.0如何实现源码编译安装
    这篇文章主要为大家展示了“Mysql 8.0如何实现源码编译安装”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mysql 8.0如何实现源码编译安装”这篇文章吧...
    99+
    2024-04-02
  • 如何编写实现shell终端代码
    本篇内容主要讲解“如何编写实现shell终端代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写实现shell终端代码”吧!代码如下:#include"apue.h"i...
    99+
    2023-06-09
  • 如何解决基于node的前端项目编译时内存溢出问题
    这篇文章给大家分享的是有关如何解决基于node的前端项目编译时内存溢出问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先看我模拟出的报错内容具体截图如下里面有句关键的话,CA...
    99+
    2024-04-02
  • Python底层技术揭秘:如何实现字节码编译器
    Python底层技术揭秘:如何实现字节码编译器Python作为一门高级语言,其强大的特性和灵活性吸引着众多开发者。然而,要真正深入了解Python,我们需要深入其底层技术,探索其内部的工作机制。本文将带你揭秘Python底层的字节码编译器,...
    99+
    2023-11-08
    Python 编译器 字节码
  • Python编程算法:如何在Windows上实现实时性?
    Python是一个流行的编程语言,用于开发各种应用程序,包括科学计算、网络应用、桌面应用等。但是,Python并不是一个实时编程语言,这意味着在某些情况下,Python代码可能无法满足实时性的要求。在本文中,我们将探讨如何在Windows...
    99+
    2023-06-15
    windows 实时 编程算法
  • 如何在 Windows 上实现 PHP 的实时编程算法?
    PHP 是一种流行的服务器端编程语言,广泛用于开发动态网站和 Web 应用程序。与其他编程语言相比,PHP 具有易学易用、开发效率高、灵活性强等优点。但是,PHP 在处理大量数据和高并发请求时,效率会受到一定程度的影响。为了解决这个问题,...
    99+
    2023-10-01
    实时 编程算法 windows
  • 如何在Go语言中实现实时异步编程?
    Go语言是一种非常流行的开发语言,其强大的并发和并行能力使其成为编写高性能应用程序的首选语言之一。在Go语言中,实现实时异步编程是一项非常重要的任务。在本文中,我们将介绍如何在Go语言中实现实时异步编程,并提供一些实用的示例代码。 了解G...
    99+
    2023-07-01
    实时 linux 异步编程
  • Numpy 编程算法的重定向在 Python 中如何实现?
    Numpy 是 Python 编程语言中的一个扩展库,主要用于科学计算和数据处理。它提供了高性能的数组和矩阵运算功能,以及许多数学函数和数据操作工具。在 Numpy 中,重定向是一种非常常见的操作,它可以将程序的输出流重定向到指定的位置,...
    99+
    2023-10-02
    重定向 numpy 编程算法
  • 如何编写代码实现15分钟时间提醒
    这篇文章主要讲解了“如何编写代码实现15分钟提醒”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写代码实现15分钟提醒”吧!保存为.vbs代码如下:today=Date() years=...
    99+
    2023-06-09
  • 如何在 PHP Laravel 中使用编程算法实现重定向?
    在开发网站或应用程序时,重定向是一个非常常见的需求。在 PHP Laravel 中,我们可以使用编程算法实现重定向。本文将介绍如何在 PHP Laravel 中使用编程算法实现重定向。 什么是重定向? 重定向是指将用户从一个 URL 地址重...
    99+
    2023-10-09
    laravel 重定向 编程算法
  • Java编程中如何实现异步编程和重定向同时处理资源加载?
    在Java编程中,异步编程和重定向是两个非常常见的技术。在某些情况下,我们需要同时处理资源加载,并且需要使用异步编程和重定向技术,以提高应用程序的性能和响应速度。本文将介绍如何在Java编程中实现异步编程和重定向同时处理资源加载。 一、什...
    99+
    2023-11-07
    重定向 异步编程 load
  • 如何在Windows上编写Go语言程序并实现重定向?
    Go语言是一种简单、高效、并发的编程语言,因此在开发应用程序时被广泛采用。本文将为您介绍如何在Windows操作系统上编写Go程序并实现重定向。 一、安装Go语言环境 在开始之前,您需要先安装Go语言环境。您可以前往官方网站(https:...
    99+
    2023-08-11
    windows 编程算法 重定向
  • 【JAVA】有关时间的操作在编程中如何实现?
    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言Date 类Date 类方法Data的缺陷实例获取当前日期时间日期比较java中设置date数据的显示格式 前言 在许多应...
    99+
    2023-08-16
    java 开发语言
  • PHP 实时编程算法:如何在 Windows 环境下优化代码?
    随着互联网技术的发展,PHP 作为一种高效的编程语言被广泛应用于网站开发中。在进行 PHP 实时编程时,我们常常会面临代码优化的问题,而在 Windows 环境下,我们需要更加注意一些细节。本文将为您介绍如何在 Windows 环境下优化...
    99+
    2023-10-02
    实时 编程算法 windows
  • 如何在Java程序中实现异步编程和重定向同时进行资源加载?
    Java是一种广泛使用的编程语言,它提供了许多工具和库,以帮助开发人员更快地编写高质量的应用程序。在Java应用程序中,异步编程和重定向同时进行资源加载是两个常见的需求。本文将介绍如何在Java程序中实现这两个需求。 一、什么是异步编程? ...
    99+
    2023-11-07
    重定向 异步编程 load
  • 如何在ASP文件中使用异步编程来实现重定向?
    ASP是一种服务器端脚本语言,它可以用来创建动态网站和web应用程序。在编写ASP文件时,我们需要考虑如何使用异步编程来实现重定向,以提高网站的性能和响应速度。本文将介绍如何在ASP文件中使用异步编程来实现重定向,并附有演示代码。 什么是异...
    99+
    2023-10-02
    文件 异步编程 重定向
  • 如何在 Python shell 中实现并发编程以及重定向输出?
    Python是一种高级编程语言,广泛应用于各种应用程序和服务的开发。Python拥有丰富的库和模块,使得开发者能够轻松地实现各种功能。Python shell是一个交互式的解释器,提供了一个简单的界面来测试和运行Python代码。在本文中,...
    99+
    2023-08-09
    shell 重定向 并发
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作