写点什么

Ink 2.0 发布:命令行应用程序的 React

  • 2019-04-25
  • 本文字数:1419 字

    阅读完需:约 5 分钟

Ink 2.0发布:命令行应用程序的React

自称为“命令行接口 React”的 JavaScript 库 Ink 最近发布了第二个主要迭代版本。借助 Ink,开发者可以通过组装 React 组件来构建命令行应用程序,并充分利用他们的 React 知识和 React 生态系统。


Ink是一个 React 渲染器,可以将 React 组件树转成字符串,然后输出到终端上。Ink 2.0 可以无缝支持 React 的某些特性,比如HooksContext,还可以与 React 生态系统中的其他重要组件(比如Redux)发生交互。


官方文档提供了如下的示例:


import React, {Component} from 'react';import {render, Color} from 'ink';
class Counter extends Component { constructor() { super(); this.state = { i: 0 }; }
render() { return ( <Color green> {this.state.i} tests passed </Color> ); }
componentDidMount() { this.timer = setInterval(() => { this.setState({ i: this.state.i + 1 }); }, 100); }
componentWillUnmount() { clearInterval(this.timer); }}
render(<Counter/>);
复制代码


终端上的输出:



Ink 2.0 提供了 7 个内置的组件。还有其他10个第三方组件也可用于开发终端应用程序,以及 14 个组件正在迁移到 Ink 2.0。这些可重用的组件提供了常用的终端用户界面布局和行文(文本输入框、进度条、微调器、确认输入框、滚动条、自动完成、文本动画、图像显示等)。这些组件也解决了其他一些较受关注的问题,比如链接、路由、动画和颜色。


Ink 2.0 使用了Yoga,一个实现了Flexbox的跨平台布局引擎。所以,每个元素就是一个 Flexbox 容器,可以使用相关的 Flexbox 参数(flexShrinkflexGrowflexDirection等等)。内置组件 Box 可用于配置布局。下列的组件:


import {render, Box, Text, Color} from 'ink';
const Flexbox = () => ( <Box padding={2} flexDirection="column"> <Box> <Box width={14}> <Text bold>Total tests:</Text> </Box> 12 </Box>
<Box> <Box width={14}> <Text bold>Passed:</Text> </Box> <Color green>10</Color> </Box>
<Box> <Box width={14}> <Text bold>Failed:</Text> </Box> <Color red>2</Color> </Box> </Box>);
render(<Flexbox/>);
复制代码


将在终端上显示:



可以使用 ink-testing-library 来测试 Ink 组件。这个库的灵感来自 react-testing-library,一个可替代 Jest 来测试 React 组件的框架。可以像下面这样测试一个计数器应用程序:


import React from 'react';import {Text} from 'ink';import {render} from 'ink-testing-library';
const Counter = ({count}) => <Text>Count: {count}</Text>;
const {lastFrame, rerender} = render(<Counter count={0}/>);lastFrame() === 'Count: 0'; //=> true
rerender(<Counter count={1}/>);lastFrame() === 'Count: 1'; //=> true
复制代码


终端应用程序和命令行应用程序之间有一个区别。终端应用程序具有图形化用户界面,可能带有复杂的导航和输入功能。


基于blessed终端界面库构建的React-blessed可以让应用程序变成下面这样:



Ink 旨在简化命令行应用程序的界面,提供更简单的输入功能:



Ink 采用了 MIT 开源协议。开发者可以通过其GitHub主页贡献代码。


查看英文原文Ink: React for Interactive Command-Line Apps


2019-04-25 08:005249
用户头像

发布了 731 篇内容, 共 454.3 次阅读, 收获喜欢 2003 次。

关注

评论 1 条评论

发布
用户头像
秀啊 react
2019-04-25 10:15
回复
没有更多了
  • 一天梳理完 React 所有面试考察知识点

    性能优化,永远是面试的重点,性能优化对于 React 更加重要

    2022-10-25

  • 这些 react 面试题你会吗,反正我回答的不好

    第二个参数是一个函数,该函数会在 setState函数调用完成并且组件开始重渲染时调用,可以用该函数来监听渲染是否完成。

    2022-09-24

  • 从源码角度看 React-Hydrate 原理

    React 渲染过程,即ReactDOM.render执行过程分为两个大的阶段:render 阶段以及 commit 阶段。React.hydrate渲染过程和ReactDOM.render差不多,两者之间最大的区别就是,ReactDOM.hydrate 在 render 阶段,会尝试复用(hydrate)浏览器现有的 dom 节点,并相互

    2022-11-25

  • 🧩 Vue 深入组件开发☞#异步组件#

    大家好,我是小鑫同学。一位从事过Android开发、混合开发,现在长期从事前端开发的编程爱好者,我觉得在编程之路上最重要的是知识的分享,所谓三人行必有我师。所以我开始在社区持续输出我所了解到、学习到、工作中遇到的各种编程知识,欢迎有想法、有同感的

    2022-10-12

  • vue 中的几个高级概念

    混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

    2023-02-28

  • 在 React 中渲染大型数据集的 3 种方法

    随着 Web 应用程序变得越来越复杂,我们需要找到有效的方法来优化性能和渲染大型数据集。在 React 应用程序中处理大型数据集时,一次呈现所有数据可能会导致性能不佳和加载时间变慢。

    2023-08-02

  • 加餐 01|留言区心愿单:真·子组件以及 jsx-runtime

    在本专栏选用的React 18.2.0版本和与它配套的CRA中,新JSX运行时也是被默认启用的。

    2022-09-20

  • 编程小白也能快速掌握的 ArkUI JS 组件开发

    近期,Playground中ArkUI JS组件在线预览又有更新啦~

    2022-08-31

  • 22|物料组件的编译和管理:如何处理组件的多种模块格式?

    浏览器端把握在用户手里,我们无法预测实际代码在运行过程中会出现什么兼容问题,如果平台渲染能支持多重模块格式,就意味着可以做一些优化策略,在低版本浏览器中,就可以优先选择对应能支持的模块格式。

    2023-01-13

  • 特别加餐|用 ChatGPT 开发一个看板项目

    有不少同学希望了解AI,尤其是生成式AI对前端开发工作和前端工程师意味着什么,我个人也在关注相关领域的进展,正好趁着这次加餐的机会,跟你交流一下我的想法。

    2023-05-22

  • 39|语法扩展:通过 JSX 来做语法扩展

    这节课我们就来看看JSX是如何用在Web UI开发中的。即使你不使用React,这样的模版模式也有很大的借鉴意义。

    2022-12-17

  • Angular tsconfig.json 文件里的 paths 用途

    Angular 项目目录中的 TSConfig 文件表明该目录是 TypeScript 或 JavaScript 项目的根目录。 TSConfig 文件可以是 tsconfig.json 或 jsconfig.json,两者都有相同的配置变量集。

    2022-09-08

  • CLI 新功能之多项目启动器

    大家好,我是小鑫同学。一位从事过Android开发、混合开发,现在长期从事前端开发的编程爱好者,我觉得在编程之路上最重要的是知识的分享,所谓三人行必有我师。所以我开始在社区持续输出我所了解到、学习到、工作中遇到的各种编程知识,欢迎有想法、有同感的

    2022-10-12

  • 32|Fabric:新渲染器的演进之路

    对核心渲染流程的持续迭代和优化,是 React Native 能够广受欢迎的重要原因之一。

    2023-01-01

  • 从 React 源码角度看 useCallback,useMemo,useContext

    useCallback和useMemo是一样的东西,只是入参有所不同。

    2023-02-28

  • 04|Vue 概览:Vue 哪些内容是你必须要掌握的?

    这节课我们就来揭开Vue的神秘面纱,一起来看看Vue里必须掌握的知识点,以及怎样学习Vue才更加高效。

    2023-05-01

  • React 组件设计模式 - 纯组件,函数组件,高阶组件

    如果你想写的组件只包含一个 render 方法,并且不包含 state,那么使用函数组件就会更简单。我们不需要定义一个继承于 React.Component 的类,我们可以定义一个函数,这个函数接收 props 作为参数,然后返回需要渲染的元素。

    2022-12-07

  • 小程序生命周期

    小程序生命周期分为 : 页面生命周期 + 组件生命周期它有四个阶段:

    2023-04-14

  • Qt | 控件之 QComboBox

    QComboBox组件的使用。

    2022-07-17

  • 构建工具 Gulp-lesson5

    大家好,我是小鑫同学。一位从事过 Android 开发、混合开发,现在长期从事前端开发的编程爱好者,我觉得在编程之路上最重要的是知识的分享,所谓三人行必有我师。所以我开始在社区持续输出我所了解到、学习到、工作中遇到的各种编程知识,欢迎有想法、有同感

    2022-10-13

发现更多内容

为什么区块链技术仍然被人们认为当成一个投机的工具?

CECBC

重装变态的微信

箭上有毒

生活记录 4月日更

图算法系列之深度优先搜索(二)

Silently9527

深度优先搜索 数据结构和算法 图算法

你的开发好帮手:下一代云原生开发工具技术

华为云开发者联盟

云原生 编码 开发工具 代码补全 调测

工行首次全面展示数十项数字人民币研发试点成果

CECBC

数字人民币

强化区块链技术在数字政府、智慧城市、智能制造等领域应用

CECBC

人工智能

别让心里的墙,挡住了你未来的路

小天同学

思考 认知提升 认知 4月日更

MySQL高可用架构:mysql+keepalived实现

AI乔治

Java MySQL 架构 高可用架构 keepalive

如何在 Spring/Spring Boot 中优雅地做参数校验?

JavaGuide

Java spring springboot

全面复盘B站面试时坑我最深的Java并发:JDK源码剖析

Java架构师迁哥

浪潮×积成电子:尝到了工业互联网的“甜头”

云计算

美的蒸烤料理炉全新上线华为商城,首款搭载鸿蒙系统的设备有何不同?

科技汇

对于医疗健康行业,区块链最大的价值在哪里?

CECBC

医疗

智能小车系列-树莓派初次使用环境配置

波叽波叽啵😮一口盐汽水喷死你

树莓派 wifi SSH 无显示器 树莓派首次配置

容器&服务:metrics-server探索

程序员架构进阶

k8s 28天写作 弹性扩容 4月日更 metrics server

华为云FusionInsight MRS:千余节点滚动升级业务无中断

华为云开发者联盟

大数据 数据湖 节点 集群 华为云FusionInsight MRS

Rust从0到1-代码组织-use关键字

rust 代码组织 use

云上细粒度访问管理的参考架构

张晓辉

云原生 网关 访问控制 OPA

持续交付实战

云飞扬

AI数学基础之:P、NP、NPC问题

程序那些事

人工智能 AI 程序那些事

收藏!阿里P9耗时28天,总结历年亿级活动高并发系统设计手册

Java架构师迁哥

面向软件 IT 专业的高校大学生就业与专业关联性的问卷调查

谙忆

架构师必经之路!Github榜首Java代码优化:77案例+28技巧开源分享

Java架构师迁哥

LeetCode题解:151. 翻转字符串里的单词,数组,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

云图说|读请求太多怎么办?一键读写分离来帮忙

华为云开发者联盟

MySQL 读写分离 云数据库 云数据库MySQL

一枚比特币变换一台车,特斯拉与比特币还要绑定多久?

CECBC

特斯拉

面试别慌!阿里专家带你从【入门+基础+进阶+项目】攻破SpringBoot

Java架构师迁哥

从UCloud优刻得2020年全年财报,看云计算公司发展之路

Dubbo学习笔记

风翱

dubbo 4月日更

京东首席架构师深邃洞察:服务化+云原生+微服务

Java架构师迁哥

小技巧 | 帮助运营小姐姐批量修改文件名的几种方式

梁龙先森

Node 脚本 PowerShell

Ink 2.0发布:命令行应用程序的React_大前端_Bruno Couriol_InfoQ精选文章