AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

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:005222
用户头像

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

关注

评论 1 条评论

发布
用户头像
秀啊 react
2019-04-25 10:15
回复
没有更多了
发现更多内容

数据应用总结二

Mars

架构师入门感悟之十三

笑春风

区块链世界的中心应该是什么?

CECBC

区块链 区块链数字经济

架构师训练营第三周作业

跳蚤

有关单例模式的总结

跳蚤

第八周 学习总结

简简单单

重学JS | Proxy与Object.defineProperty的用法与区别

梁龙先森

大前端 编程语言 28天写作

又见拉布拉猪

Justin

28天写作 灌水 减压

Week13作业

lggl

今天听课想到的小事

Nydia

十三周-作业

水浴清风

好书推荐--大数据日知录(深入理解大数据的必备书籍)附电子版下载

五分钟学大数据

大数据

极客大学·产品经理训练营·第一章作业

二大爷

产品经理 产品经理训练营

第一周作业

Geek_ce1551

Google 搜索引擎是如何对搜索结果进行排序

Mars

Java 程序经验小结:性能优化手段之避免创建不必要的对象

后台技术汇

28天写作

从炒作到风口,谁在引领中国区块链浪潮?

CECBC

比特币 区块链

架构师训练营第二期 Week 13 作业

bigxiang

架构师训练营第2期

Week13 总结笔记

lggl

面试官问我:什么是静态代理?什么是动态代理?注解、反射你会吗?

Java鱼仔

Java 反射 动态代理 java反射

第一周作业

大熊猫

架构师训练营第二期 Week 13 总结

bigxiang

架构师训练营第2期

CentOS安装和使用FFmpeg

王坤祥

ffmpeg 视频处理

Soul网关源码阅读(五)请求类型探索

Java 源码分析 网关

开创我国区块链定制化制造新时代

CECBC

区块链

第八周 性能优化(二) 作业 「架构师训练营 3 期」

胡云飞

中台 | 中台到底是什么?

xcbeyond

中台 中台架构 中台的由来 28天写作

产品经理训练营笔记-认识产品经理(下)

.nil?

产品经理训练营

第八周 课后作业

简简单单

产品经理JD调研备忘录

学习高手song轻松

产品

Elasticsearch的基础分布式架构

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

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