cat webpack.config.js
var config = { entry: './main.js', output: { path:__dirname, filename: 'index.js', }, devServer: { inline: true, port: 3000 }, module: { loaders: [ { test: //.js?$/, exclude: /node_modules/, loader: 'babel-loader', query: { presets: ['es2015', 'react'] } }] }}cat main.js
import React from 'react';import ReactDOM from 'react-dom';import Component1 from './component/component1'; ReactDOM.render(<Component1 />, document.getElementById('index'))cat index.html
<!DOCTYPE html><html> <head> <meta charset = "UTF-8"> <title>React App </title> </head> <body> <div id = "index"></div> </body></html> <script src = "index.js"></script>cat component/component1.js
import React from 'react';export default class Component1 extends React.Component { render() { return ( <div> Hello <br /> component1 </div> ); }}进入项目根目录
webpack 输出 index.js文件
然后运行 npm start
浏览器显示 “component1” 调用组件成功
解决方法,在Chrome devtools 中查
1 箭头函数
cat component/component1.js
import React from 'react';export default class Component1 extends React.Component { render() { //最简单的 function,一个参数 a var foo = a => a ; console.log(foo('hihi')); //没有参数的直接是空括号 var foo2 =() =>{ alert('haha'); } foo2(); //多个参数要用到小括号,参数间逗号间隔,例如两个数字相加 var add = (a,b) => a+b; console.log(add(1,2)); //返回对象时需要用小括号包起来,因为大括号被占用为代码块了 var getHash =() =>{ return( { name:'zhangsan', age:10 }); }; console.log(getHash()); //点击事件, document.addEventListener('click',event=>{console.log(event);}); return ( <div> <br /> component1 </div> ); }}vi employee.js
class Employee{ //构造 function constructor(id,name,job){ this.id = id; this.name = name; this.job = job; } //注意,上面无分号间隔 getMessage(){ return this.id + "=>" + this.name +"=>" +this.job; }} //export 是导出类,其他地方可以直接 import 这个类 //default 只能用一次,是只是当前页用一次,还是其他页也不能用了? export default Employee;vi component/component1.js
import React from 'react';import Employee from '../employee.js';export default class Component1 extends React.Component { render() { var e1 = new Employee('001','jack','cooker'); console.log(e1.getMessage()); return ( <div> <br /> component1 </div> ); }}vi component/component1.js
import React from 'react';import Employee from '../employee.js';export default class Component1 extends React.Component { render() { var e1 = new Employee('001','jack','cooker'); console.log(e1.getMessage()); // {// let a = 10;// var b = 11;// }// console.log(a);// console.log(b);for(let i =0;i<10;i++){}for(var k=0;k<10;k++){}//console.log(i);console.log(k); return ( <div> <br /> component1 </div> );}}cat main.js
import React from 'react';import ReactDOM from 'react-dom';import Component1 from './component/component1';import Component2 from './component/component2'; // ReactDOM.render(<Component2 />, document.getElementById('index2')) //ReactDOM.render(<Component1 />, document.getElementById('index'))// ReactDOM.render(// <div>// <h1>{1+1}</h1>// </div>// ,// document.getElementById('index')// ); var arr =[ <h1> hi</h1>, <h2> react is awesome</h2> ]; ReactDOM.render( <div>{arr}</div>,document.getElementById('index'));vi component/component2.js
import React,{Component} from 'react';import ReactDOM from 'react-dom';// class Component2 extends React.Component {// render() {// // //最简单的 function,一个参数 a// // var foo = a => a ;// // console.log(foo('hihi'));// // //没有参数的直接是空括号// // var foo2 =() =>{// // alert('haha');// // }// // foo2();// // //多个参数要用到小括号,参数间逗号间隔,例如两个数字相加// // var add = (a,b) => a+b;// // console.log(add(1,2));// // //返回对象时需要用小括号包起来,因为大括号被占用为代码块了// // var getHash =() =>{// // return(// // {// // name:'zhangsan',// // age:10// // });// // };// // console.log(getHash());// // //点击事件,// // document.addEventListener('click',event=>{console.log(event);});// return (// <div>// Component2<br />// </div>// );// }// }//声明一个组件类,叫 MyTitleclass Component2 extends Component{ show(){ console.log(this.props.title); console.log(this.props.contents); console.log(this.props.name); } //渲染组件:一个按钮,并可以点击 //注意 bind(this)的写法,这是 JSX 语法要的 //如果怕麻烦也可以用箭头 function render(){ return(<button onClick={this.show.bind(this)}>click</button>); }}//要向组件传递的数据 var data ={ title:'this is a little', contents:'this is contents'};ReactDOM.render(<Component2 {...data} name ={'my name'} />,document.getElementById('index'));export default Component2; 步骤是:1 声明组件: ES6的类声明 2 渲染组件: render用法 渲染方法包括两个参数,一个是组件名称,一个是页面的 id,进一步得想,index.html可以有多个 id吗?不同的 component可以定位不同的 id,然后在 index.html上显示吗?还是main.js是一个大的组件,由很多小组件组合而成, 这就不是 SPA了,多页面这里如何处理
cat component/NodeList.js
'use strict';import React,{Component} from 'react';import ReactDOM from 'react-dom';//声明一个组件类,叫 NodeListclass NodeList extends Component{ render(){ return( <ul> { //遍历 this.props.children 节点 React.Children.map(this.props.children,function(child){ return(<li>{child}</li>); }) } </ul> ); <NodeList><span> hello</span><span> world</span></NodeList>; }}export default NodeList;cat main.js
import React,{Component} from 'react';import ReactDOM from 'react-dom'; import NodeList from './component/NodeList'; ReactDOM.render(<NodeList><span> hello</span><span> world</span></NodeList> ,document.getElementById('index'));icat component/inputstate2.js
'use strict';import React,{Component} from 'react';import ReactDOM from 'react-dom';//声明一个组件类,叫 Searchclass Search extends Component{ checkSth(){ var inputValue = this.refs.myInput.value; alert(inputValue); } render(){ return(<div><input type = "text" ref="myInput" /><button onClick ={this.checkSth.bind(this)}>获取内容</button></div> ); }}// ReactDOM.render(// document.getElementById('index')// );export default Search;cat main.js
import React,{Component} from 'react';import ReactDOM from 'react-dom';import Search from './component/inputstate2'; ReactDOM.render(<Search/> ,document.getElementById('index'));#综合案例cat component/box.js 'use strict';import React,{Component} from 'react';import ReactDOM from 'react-dom';//小部件,渲染为 UL 列表class Items extends Component{ render(){ var arrLi =[]; for(let i=0;i<this.props.info.length;i++){ //注意,这不是拼接字符串 arrLi.push(<li key={i}> {this.props.info[i]}</li>); } return(<ul>{arrLi}</ul>); }}//大部件class Box extends Component{ constructor(props){ super(props); this.state ={ list:this.props.sourceData } } checkSth(){ var arr=[]; //获取文本信息 var inputValue = this.refs.myInput.value; //获取 props 信息 var sourceData = this.props.sourceData; //选择数据 for(let i=0;i<sourceData.length;i++){ if(sourceData[i].indexOf(inputValue)!= -1){ arr.push(sourceData[i]); } } //更新状态机 this.setState({list:arr}); } render(){ return( <div><input type="text" ref="myInput" onKeyUp={this.checkSth.bind(this)} /><Items info={this.state.list} /></div> ); }};export default Box;cat main.js
import React,{Component} from 'react';import ReactDOM from 'react-dom';import Box from './component/Box'; var data = ['jackson','milly','john smith','make','denny','emili','jenny']; ReactDOM.render(<Box sourceData={data}/> ,document.getElementById('index'));新闻热点
疑难解答