用webpack+bable+react搭建环境
1.用webpack+bable+react搭建环境
2.基于上面的环境写了一个增删的demo
3.使用React Devtools调试工具进行react调试
遇到的问题:
- ./component/App.js 加载模块出问题
- node_modules/localDb/index.js文件有问题
- 新建一个对象时,对象名称应该首字母大写,例如this.db = new LocalDb('React-Todos');
- pakeage.json 加载的模块有问题
- 里面的安装包版本有限制,
pakeage.json - {
-
"name": "react-todo16",
-
"version": "1.0.0",
-
"description": "",
-
"main": "webpack.config.js",
-
"scripts": {
-
"test": "echo \"Error: no test specified\" && exit 1"
-
},
-
"author": "",
-
"license": "ISC",
-
"devDependencies": {
-
"babel-core": "^5.5.8",
-
"babel-loader": "^5.1.4",
-
"css-loader": "^0.14.5",
-
"file-loader": "^0.8.4",
-
"jsx-loader": "^0.13.2",
-
"node-libs-browser": "^0.5.2",
-
"node-sass": "^3.2.0",
-
"sass-loader": "^1.0.2",
-
"style-loader": "^0.12.3",
-
"url-loader": "^0.5.6",
-
"webpack": "^1.9.11"
-
}
- }
- 里面的安装包版本有限制,
- this.setState({ todos: this.state.todos, isAllChecked });
- 只有setState()函数才能自动调用render函数,渲染ui洁面;
- this.state.todos.push(todoItem);会改变todos,但是不会自动调用render函数,渲染ui界面
- 一旦数据增加和删除,都应该记得修改数据库
- todoDoneCount: (this.state.todos && this.state.todos.filter((todo)=>todo.isDone)).length || 0
- 逻辑与和逻辑或只有当在if语句中时,返回的才是布尔类型,在其他情况下,其实相当于条件语句
- 例如:var a=3||4; //结果a=3. (短路运算)
- 例如:var a=2&&3; //结果a=3 (前面为真,才会走后面,相当于if语句,为真时走后面)
- 导出组件的两种方式
- class TodoHeader extends React.Component {} export default TodoHeader;
- export default class TodoItem extends React.Component{}
- 最外层父组件
- class App extends React.Component {}
- React.render(
, document.getElementById("app"));
- 组件
- 父组件:管理和控制数据
- 子组件:显示和操作数据
- state和props的区别
- State:控制组件内部的数据——————(变化的)———(类似标志位)
- Props:控制外部对内部传递的数据———(不变化的)———(类似自定义属性)
- 解释:对于父组件来说,要存储todoList的数据,那就是内部信息,要用state来存储;而如果父组件要将todolist数据传递给子组件,对子组件来说,那就是传递来的外部信息
- 新学到的函数
- filter():filter方法会创建一个新数组,新数组的元素是符合条件的元素,此处return true---->todo.isDone=false;就是符合条件的, 未完成的就是filter新生成的数组
- let todos = this.state.todos.filter(todo => !todo.isDone);
- every()😕/ every()是用来测试数组中的每一项是否满足条件 当所有的项都满足条件时返回true
- if (this.state.todos.every((todo) => todo.isDone))
- filter():filter方法会创建一个新数组,新数组的元素是符合条件的元素,此处return true---->todo.isDone=false;就是符合条件的, 未完成的就是filter新生成的数组
- React里面写样式
- {this.props.text}
- <button ref="deleteBtn" onClick={this.handlerDelete.bind(this)} style={{'display':'none'}} className='fr'>删除
- 类名要用className
- 获取真实的dom节点,要使用ref属性
- <button ref="deleteBtn" onClick={this.handlerDelete.bind(this)} style={{'display':'none'}} className='fr'>删除
- React.findDOMNode(this.refs.deleteBtn).style.display='inline';
- 扩展运算符的使用:
var props =- 下面两句话等价
<TodoFooter {...props} /> // spread操作符
- 下面两句话等价