React开发中常用的工具集锦

本文从属于笔者的React入门与最佳实践系列。

本文记录了笔者在React开发中常见的一些工具插件,如果你想寻找合适的项目生成器或者模板,请参考笔者的使用Facebook的create-react-app快速构建React开发环境

React Devtools

React Devtools是React官方提供的类似于浏览器调试台的插件,可以允许以查看组件的层次、各个组件的Props、States等等信息。使用方式也很简单,直接在Firefox或者Chrome的加载项仓库中搜索下载即可。

React-StoryBook:开发中独立于APP查看React组件

React Storybook可以在你开发的过程中将React组件独立于整个应用程序进行查看,其主要特征为:

  • 独立的组件运行环境

  • 组件的热加载

  • 可以与Redux、Relay以及Meteor无缝集成

  • 支持CSS

Quick Start

Installation

首先需要将React Storybook添加到应用中,使用npm进行安装即可:


npm i --save-dev @kadira/storybook

然后,将运行脚本添加到package.json文件中:


{..."scripts": {"storybook": "start-storybook -p 9001"}...
}

接下来,你就可以直接输入npm run storybook然后启动开发模块。

编写测试用的Story

在测试环境搭建完成之后需要编写一些Stories,即是测试故事。基本来说,一个Story就是一个单独的组件的视图,有点类似与一个测试用例,但是可以在Storybook UI中直接查看。一个典型的测试Story如下所示:

// components/stories/button.jsimport React from 'react';
import { storiesOf, action } from '@kadira/storybook';storiesOf('Button', module).add('with text', () => (<button onClick={action('clicked')}>My First Button</button>)).add('with no text', () => (<button></button>));

Configuration

在编写好了Story之后需要告诉Storybook应该如何加载,需要进行一些简单的配置,只要添加如下类似的内容到.storybook/config.js中:

import { configure } from '@kadira/storybook';function loadStories() {require('../components/stories/button');// require as many stories as you need.
}configure(loadStories, module);

接下来,可以直接使用npm run storybook来运行界面。

CSS Support

有时候,我们需要在进行组件预览的时候导入额外的CSS文件,如果直接是在组件的JS内引入的CSS则可以直接使用,譬如你可以直接使用Material UI。而如果是使用Webpack的话可以在config文件中添加如下webpack.config(.storybook/webpack.config.js):

var path = require('path')
var webpack = require('webpack')module.exports = {...module: {loaders: [{test: /\.js$/,loaders: [ 'babel' ],exclude: /node_modules/,include: __dirname},{test: /\.css?$/,loaders: [ 'style', 'raw' ],include: __dirname}]}
}

如果是使用Meteor的话,可以在Meteor app中添加如下配置:

const path = require('path');
module.exports = {module: {loaders: [{test: /\.css?$/,loaders: [ 'style', 'raw' ],include: path.resolve(__dirname, '../')}]}
}

Stories

Redux

  • 组件


import React, { Component, PropTypes } from 'react'import classnames from 'classnames'import TodoTextInput from './TodoTextInput'class TodoItem extends Component {constructor(props, context) {super(props, context)this.state = {editing: false}}handleDoubleClick() {this.setState({ editing: true })}handleSave(id, text) {if (text.length === 0) {this.props.deleteTodo(id)} else {this.props.editTodo(id, text)}this.setState({ editing: false })}render() {const { todo, completeTodo, deleteTodo } = this.propslet elementif (this.state.editing) {element = (<TodoTextInput text={todo.text}editing={this.state.editing}onSave={(text) => this.handleSave(todo.id, text)} />)} else {element = (<div className="view"><input className="toggle"type="checkbox"checked={todo.completed}onChange={() => completeTodo(todo.id)} /><label onDoubleClick={this.handleDoubleClick.bind(this)}>{todo.text}</label><button className="destroy"onClick={() => deleteTodo(todo.id)} /></div>)}return (<li className={classnames({completed: todo.completed,editing: this.state.editing})}>{element}</li>)}}TodoItem.propTypes = {todo: PropTypes.object.isRequired,editTodo: PropTypes.func.isRequired,deleteTodo: PropTypes.func.isRequired,completeTodo: PropTypes.func.isRequired}export default TodoItem
  • Story


import React from 'react';import TodoItem from '../TodoItem';import { storiesOf, action } from '@kadira/storybook';storiesOf('TodoItem', module).add('not completed', () => {const todo = {id: 'the-id',text: 'Hello Todo',completed: false};return getItem(todo);}).add('completed', () => {const todo = {id: 'the-id',text: 'Hello Todo',completed: true};return getItem(todo);});function getItem(todo) {return (<div className="todoapp"><div className="todo-list"><TodoItemtodo={todo}editTodo={action('editTodo')}deleteTodo={action('deleteTodo')}completeTodo={action('completeTodo')}/></div></div>);}

HTML2JSX:智能地将HTML文件转化为JSX格式

对于大量现存的基于HTML开发的网页,我们可能需要将它们转化为JSX的语法,笔者推荐使用html-to-react-components这个工具,可以自动将HTML标签转化为JSX的标签:

usage example animation

$ npm i -g html-to-react-components
$ html2react ./src/*.html -c stateless -m es6 -d _ -o components -e jsx

react-monocle:可视化地展示React组件的层次结构

React Monocle是一个帮助开发人员可视化浏览React组件的层次结构的工具,其大概的功能如下所示:

React Monocle会遍历你的React源文件来构建一颗基于React组件的可视化树,而且随着你的应用程序状态的变化,譬如存储在Redux中的状态的变化也会动态地来修正层次结构。该工具的安装方式也十分简单:


npm install -g react-monoclemonocle -c <html> -b <bundle>

why-did-you-update:提醒你不必要的重渲染

该函数会在出现不必要的重渲染的时候提醒你。使用方法也很简单:


import React from 'react'if (process.env.NODE_ENV !== 'production') {const {whyDidYouUpdate} = require('why-did-you-update')whyDidYouUpdate(React)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9-[记录操作]--数据的增删改,权限管理

1、数据操作语言&#xff1a; DML&#xff08;data manage language&#xff09; 在MySQL管理软件中&#xff0c;可以通过SQL语句中的DML语言来实现数据的操作&#xff0c;包括 使用INSERT实现数据的插入UPDATE实现数据的更新使用DELETE实现数据的删除使用SELECT查询数据以及。…

hdu 1023 Train Problem II

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid1212 Train Problem II Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know if all the trains come in strict-increasing order, how many orders that all the tra…

Nginx自建CDN加速节点 实现DNS智能解析网站项目

如今&#xff0c;网站项目越来越多的会使用CDN加速&#xff0c;如果需要便捷一点的可以直接用第三方提供的CDN加速服务&#xff0c;比如百度CDN、七牛、又拍云、腾讯云、阿里云等等服务商都有提供这类服务。但是前提条件是需要一定的成本&#xff0c;以及网站域名是需要BA才可以…

matlab中获取view,ios 怎么获取一个view的位置

ios 怎么获取一个view的位置以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;ios 怎么获取一个view的位置打开appstore进入应用&#xff0c;右上角的分享按钮(从右往左数第二个)&#xff0c;拷…

eureka需要替换吗_Spring Cloud Alibaba迁移指南1:零代码从Eureka迁移到Nacos

作者&#xff1a;得少&#xff0c;校对&#xff1a;周立。在本号首发&#xff0c;欢迎转载。Spring Cloud官方宣布Spring Cloud Netflix进入维护状态&#xff0c;后续不再会有新的功能已成为事实。作为开发者&#xff0c;如何使用极简的方式替换Netflix相关组件成为首要解决的问…

JAVA TCP通信练习

2019独角兽企业重金招聘Python工程师标准>>> 1、Server端 package com.hhdys.serviceimpl;import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.…

微服务架构下的身份认证

从单体应用架构到分布式应用架构再到微服务架构&#xff0c;应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化&#xff0c;身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用&#xff0c;如何保证高效安全的身份认证&#xff1f;面对外…

php缓存注入,利用Thinkphp 5缓存漏洞实现前台Getshell

原标题&#xff1a;利用Thinkphp 5缓存漏洞实现前台Getshell*本文原创作者&#xff1a;WindWing&#xff0c;属于FreeBuf原创奖励计划&#xff0c;禁止转载000 背景网站为了实现加速访问&#xff0c;会将用户访问过的页面存入缓存来减小数据库查询的开销。而Thinkphp5框架的缓存…

mac版小达人点读包怎么安装_小达人点读笔扩容实战:16G变128G

随着小达人点读笔可以点读的童书越来越多&#xff0c;笔的容量就是个尴尬的问题&#xff1a;是处理掉手头的16G容量的旧点读笔&#xff0c;重新再买32G容量的新点记笔吗&#xff1f;如果32G容量也不够用怎么办&#xff1f;官方可没有更大容量的点读笔了。删除原先的点读内容&am…

WorldWind源码剖析系列:可渲染对象类RenderableObject

RenderableObject是WorldWind中所有需要渲染的对象的父类&#xff0c;继承了接口IRenderable和Icomparable。其派生类体系如下所示。RenderableObject的成员如下所示。 RenderableObjectList也继承自RenderableObject。 接口Irenderable内部仅仅定义下面三个接口&#xff0c;分…

php table 下拉框,LayerUI的table 里面加 select 下拉框 – Fly社区-Mikel

先上效果图&#xff1a;直接上代码//添加样式&#xff1a;.table-select-icon{position:absolute;right:10px;line-height:34px;color:#d3d3d3}.table-select-selected dl{display:block}.table-select dl{position:absolute;left:0;padding:5px 0;z-index:999;min-width:100%;…

家里wifi网速越来越慢_家里的wifi信号不好?有了它再也不怕网速慢啦

夏天太热&#xff0c;就想宅在家里刷刷剧、打打游戏、看看新闻。可是网速却不好&#xff0c;看一会儿&#xff0c;卡一会儿&#xff0c;本来天气就热&#xff0c;这样更加烦躁&#xff01;这WiFi信号怎么会这么差&#xff1f;有什么好办法能解决这个问题呢&#xff1f;只要有了…

python文件操作实验总结,[干货分享]Python文件操作技巧总结

引言小伙伴们&#xff0c;今天给大家讲解一下python程序下的文件操作完整技巧梳理&#xff0c;都是笔者总结的干货。通过本文阅读&#xff0c;不仅可以带来生产力提升&#xff0c;也可以开发小脚本为生活带来乐趣。首先不知道大家对python有没有了解&#xff0c;不太会用的小伙…

7价 半导体掺杂_天津大学封伟团队:新型半导体二维原子晶体锗硅烷材料的带隙调控...

xxxxxxxxxxxx【研究背景】xxxx新型二维半导体原子晶体兼具原子级厚度、纳米级层状结构、极高的载流子迁移率&#xff0c;是构建未来高性能纳米光电器件的核心材料。带隙是二维半导体电子器件和光电子光器件中最重要的基本参数之一&#xff0c;是影响二维半导体电子器件开关比和…

vs2017怎么安装python包,vs2017安装pygame,vs2017安装python第三方包

vs2017有独立的python环境&#xff1b;所以想在vs2017开发python并使用第三方包&#xff0c;需要在vs2017中操作&#xff0c;完成第三方包的安装。一&#xff0c;查看vs2017有哪些版本的python&#xff0c;当前使用的是哪个版本工具--》Python--》Python环境可以看到vs2017包含…

基于opencv在摄像头ubuntu根据视频获取

&#xfeff;&#xfeff;基于opencv在摄像头ubuntu根据视频获取 1 工具 原料 平台 &#xff1a;UBUNTU12.04 安装库 Opencv-2.3 2 安装编译执行步骤 安装编译opencv-2.3 參考http://blog.csdn.net/xiabodan/article/details/23547847 提前下载OPENCV源代码包 官方&am…

Flask构建微电影(二)

第三章、项目分析、搭建目录及模型设计 3.1.前后台项目目录分析 微电影网站 前台模块后台模块前台&#xff08;home&#xff09; 数据模型&#xff1a;models.py表单处理&#xff1a;home/forms.py模板目录&#xff1a;templates/home后台&#xff08;admin&#xff09; 数据模…

Android Studio开发第四篇版本管理Git(下)

前面一片介绍了在as下如何关联远程仓库&#xff0c;这篇就介绍在开发过程中怎么应用。 提交Push 如果本地开发代码有改动了或者你觉得某功能做完了&#xff0c;你打算把改动代码提交到远程仓库&#xff0c;这个时候很简单&#xff0c; 还是在工具栏找到VSC箭头朝上的按钮。 这时…

容器大小_无根容器内部结构浅析

随着云计算的发展&#xff0c;容器变得越来越流行&#xff0c;同时也产生了实现容器的新方案&#xff0c;其中之一就是无根容器。本文介绍了无根容器的内部结构&#xff0c;并分析了无根容器网络组件中的漏洞。随着云计算的发展&#xff0c;容器变得越来越流行&#xff0c;同时…