真的是历经磨难,花了三四个小时,才写正确一个react component

第一次进入新的领域,令人兴奋,又令人备受折磨。

第一个接书上来的react组件,写起来也是一波三折。

不提class大小写,不提如何用低版本的prop-types作验证,不提在eslint里屏蔽一些问题("react/prefer-stateless-function": "off","import/no-named-as-default": 0,"import/no-named-as-default-member": 0,),不提HtmlwebpackPlugin如何生成模板,更不提空格和tab,单引号和双引号,XXXX,,啥也不提,上个文件记录,知道我曾查过很多资料,解决过这些问题。

package.json

{
  "name": "react",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "dev": "webpack-dev-server --hot"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-react-hmre": "^1.1.1",
    "eslint": "^4.11.0",
    "eslint-config-airbnb": "^16.1.0",
    "eslint-loader": "^1.9.0",
    "eslint-plugin-import": "^2.8.0",
    "eslint-plugin-jsx": "0.0.2",
    "eslint-plugin-jsx-a11y": "^6.0.2",
    "eslint-plugin-react": "^7.5.1",
    "html-webpack-plugin": "^2.30.1",
    "webpack": "^3.8.1",
    "webpack-dev-server": "^2.9.4"
  },
  "dependencies": {
    "prop-types": "^15.6.0",
    "react": "^16.1.1",
    "react-dom": "^16.1.1"
  }
}

.babelrc

{
	"presets": ["es2015", "react"],
	"plugins": ["transform-object-rest-spread"],
	"env": {
		"development": {
			"presets": ["react-hmre"]
		}
	}
}

.eslintrc

{
	"extends": "airbnb",
	"rules": {
		"comma-dangle": ["error", "never"],
		"linebreak-style": ["error", "windows"],
		"import/no-named-as-default": 0,
		"import/no-named-as-default-member": 0,
		"react/prefer-stateless-function": "off",
	},
	"env": {
		"browser": true
	}
}

webpack.config.js

var path = require("path");
var webpack = require("webpack");
var HtmlwebpackPlugin = require("html-webpack-plugin");

var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, "app");
var BUILD_PATH = path.resolve(ROOT_PATH, "build");

module.exports = {
	entry: {
		app: path.resolve(APP_PATH, "app.jsx")
	},
	output: {
		path: BUILD_PATH,
		filename: "bundle.js"
	},
	resolve: {
		extensions: [".js", ".jsx"]
	},
	devtool: "eval-source-map",
	devServer: {
		historyApiFallback: true,
		hot: true,
		inline: true,
		progress: true
	},

	module: {
		rules: [
			{
				test: /\.jsx?$/,
				enforce: "pre",
				loaders: ["eslint-loader"],
				include: APP_PATH
			},
			{
				test: /\.jsx?$/,
				loaders: ["babel-loader"],
				include: APP_PATH
			}
		]
	},

	plugins: [
		new HtmlwebpackPlugin({
			title: "My first react app",
			template: 'my-index.ejs'
		})
	]
}

app.js

import React from 'react';
import { render } from 'react-dom';
import Profile from './Profile';

const props = {
  name: 'viking',
  age: 20
};
render(<Profile {...props} />, document.getElementById('container'));

Profile.js

import React from 'react';
import PropTypes from 'prop-types';

const propTypes = {
  name: PropTypes.string.isRequired,
  age: PropTypes.number.isRequired
};

export default class Profile extends React.Component {
  render() {
    return (
      <div className="profile-component">
        {/* this.props就是传入的属性 */}
        <h1>我的名字叫{this.props.name}</h1>
        <h2>我今年{this.props.age}岁</h2>
      </div>
    );
  }
}

Profile.propTypes = propTypes;

my-index.ejs

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
  <div id="container"> </div>
  </body>
</html>

最后的END.

				
时间: 2024-07-30 16:27:31

真的是历经磨难,花了三四个小时,才写正确一个react component的相关文章

“实现这个功能,我只花了几个小时”,维护该功能总的投入时间要远远超过最初开发的几个小时。(转)

英文原文:The Hidden Costs That Engineers Ignore 有时候我们说,"实现这个功能,我只花了几个小时".但是完成之后,我们发现每隔几周,我们要么在修复该功能的 bug.向另一个工程师解释,要么做客服回答问题.解释其工作原理.维护该功能总的投入时间要远远超过最初开发的几个小时. 软件工程特有的最严酷的教训之一就是额外复杂度所带来的隐形成本.有时候,复杂度在问题领域只是固有的.为了匹配乘客和司机,通过调整价格来平衡供求是一个复杂和痛苦的问题.因此,在扩大一

请教高手如何优化下面oracle语句,19W条数据花了几个小时

问题描述 请教高手如何优化下面oracle语句,19W条数据花了几个小时 3C update agz set fa_id=(select B from B123 where a=agz.old_fa_id);commit;update agz set person_id=(select ry.id from dm_gy_ry ry where ry.sfzjhm=agz.ry_sfz and ry.yxbz='Y' and rownum=1);commit;update agz set pers

初学EXT有些地方真的不是很明白,特抛出我遇到的一个问题

问题描述 <html><head><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><script type=&q

为什么优秀的程序员喜欢命令行

懒惰这个特点位于程序员的三大美德之首:唯有懒惰才会驱动程序员尽可能的将日常工作自动化起来,解放自己的双手,节省自己的时间.而GUI,不得不说,天然就是为了让自动化变得困难的一种设计.GUI更强调的是与人类的直接交互:通过视觉手段将信息以多层次的方式呈现,使用视觉元素进行指引,最后系统在后台进行实际的处理,并将最终结果以视觉手段展现出来. 这种更强调交互过程的设计初衷使得自动化变得非常困难.另一方面,由于GUI是为人类设计的,它的响应就不能太快,至少要留给操作者反应时间(甚至有些用户操作需要人为的

Pinterest希伯尔曼:漂亮的网站疲惫的CEO

Pinterest CEO希伯尔曼(腾讯科技配图)腾讯科技讯(乐学)北京时间9月17日消息,据国外媒体报道,炙手可热的图片社交网站Pinterest开创了全新的网络设计,并有可能成为最伟大的销售引擎.近日,Pinterest公司CEO本-希伯尔曼(Ben Silbermann)罕见地接受了记者的采访.尽管这家网站已具备了盈利的巨大潜能, 但是希伯尔曼的注意力仍然放在赚钱之外.漂亮的网站,疲惫的CEO对 于一个运营如此漂亮网站的人来说,本-希伯尔曼本人看起来非常糟糕:疲倦.无力的眼睛下面是明显的眼

Pinterest希伯尔曼:漂亮的网站 疲惫的CEO

北京时间9月17日消息,据国外媒体报道,炙手可热的图片社交网站Pinterest开创了全新的网络设计,并有可能成为最伟大的销售引擎.近日,Pinterest公司CEO本-希伯尔曼(Ben Silbermann)罕见地接受了记者的采访.尽管这家网站已具备了盈利的巨大潜能,但是希伯尔曼的注意力仍然放在赚钱之外. 漂亮的网站,疲惫的CEO 对于一个运营如此漂亮网站的人来说,本-希伯尔曼本人看起来非常糟糕:疲倦.无力的眼睛下面是明显的眼袋:他的双肩沉沉地垂着:他的衬衫皱巴巴的:他的头发凌乱不堪.当他说话

不需解压的压缩软件WinMount功能剖析

前言:很多网友应该常常遇到这种情况:花了好几个小时才下载了一个几百mb或者上G的文件压缩包,然后又花了几十分钟的时间来解压,解压后的文件又太大了,占用了硬盘的很多空间.然后又得花时间去删除原来下载的压缩包,这样一解一删又花时间,不断地重复这样子的操作,时间一久,网友们是不是感到烦燥了呢?不怕,下面我就为网友们介绍一款全新软件,保证去掉你们的所有烦恼. 软件简介 WinMount是一款比较独特的解压工具,除具有常规的解压功能外,最独特的就是使用它无需解压操作,即可直接里边的文件.因为WinMoun

白帽黑客教主 TK 告诉你,黑客的游戏 CTF 究竟是什么 | 硬创公开课总结文+视频

   知乎里曾有一个热门回答"智商被碾压是一种怎样的体验". 由于经常面对异常机智的黑客,雷锋网编辑捂着胸口,表示小心心好痛.但是,如果是看着一群高智商黑客互相"碾压智商",开展一场技术.策略与智商的较量,感觉还是挺爽的! CTF(Capture The Flag)就是这样一种较量,它又被称为"夺旗赛",是网络安全技术人员之间进行技术竞技的一种比赛形式,起源于1996年DEFCON全球黑客大会,以比赛形式代替黑客们之间的真实技术比拼. 也就是说,

一个初学者的SEO学习日志

我是一名seo菜鸟,从开始学习seo到现在我已经有六个月了.那这个六个月我是如何度过的和我是如何在这六个月的seo道路上成长的起来的.先要说明一下,作为一名新手,心态很重要的.我开始学习seo的是热情满满的.学习了一月之后我也就没有了激情.心态很重要,做seo早起贪黑的,要学会调节自己的心态. 第一个礼拜 当时我做seo是有一个老师带我,不然我也不会不去做seo,有人带就是有好处,我记得第一天我去上班的时候,我老师在培训我.当时我听的云里雾里的.不知道什么是url,布局等.第一天我做的事情,就是