webpack配置react做的小例子

前端之家收集整理的这篇文章主要介绍了webpack配置react做的小例子前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

webpack配置react做的小例子

根据昨天的配置我们继续往下做,我们在做一个小例子,首先还是要接着昨天的继续往下配置
  1. npm i bootstrap url url-loader style-loader css-loader --save
安装完之后要下载bootstrap编译并压缩后的 CSS、JavaScript和字体文件。不包含文档和源码文件。然后配置在自己的app.js文件
  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import TodoApp from './components/TodoApp';
  4.  
  5. import './css/bootstrap/dist/css/bootstrap.min.css';
  6.  
  7. ReactDOM.render(<TodoApp/>,document.getElementById("app"));
都配置完之后再接着在webpack.config.js里面添加语句
  1. var path = require("path");
  2. module.exports = {
  3. //devtool:'source-map',entry: './app.js',output: {
  4. path:path.resolve(__dirname,"build"),publicPath:"/assets/",filename: 'bundle.js'
  5. },module: {
  6. rules: [
  7. { test: /\.js$/,exclude: /node_modules/,loader: "react-hot-loader!babel-loader" },{ test: /\.css$/,loader: "style-loader!css-loader" },{ test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,loader: "file-loader" },{ test: /\.(woff|woff2)$/,loader:"url-loader?prefix=font/&limit=5000" },{ test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,loader: "url-loader?limit=10000&mimetype=application/octet-stream" },{ test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,loader: "url-loader?limit=10000&mimetype=image/svg+xml" }
  8. ]
  9. }
  10. }
都配置完之后接下来就做我们小例子的内容
TodoApp.js
  1. import React from 'react';
  2.  
  3. import TodoList from './TodoList';
  4. import TodoForm from './TodoForm';
  5.  
  6. class TodoApp extends React.Component{
  7.  
  8. constructor(props){
  9. super(props);
  10.  
  11.  
  12. this.ids=1;
  13. this.state={
  14. todos:[]
  15. };
  16. this.addItem=this.addItem.bind(this);
  17. this.deleteItem=this.deleteItem.bind(this);
  18. this.okItem=this.okItem.bind(this);
  19.  
  20.  
  21.  
  22. }
  23. okItem(id){
  24. this.state.todos.map(item=>{
  25. if(item.id==id){
  26. item.done=1;
  27. }
  28. return item;
  29. });
  30. this.setState({
  31. todos:this.state.todos
  32. });
  33. }
  34. deleteItem(id){
  35. let newtodos=this.state.todos.filter((item)=>{
  36. return !(item.id==id)
  37. });
  38. this.setState({
  39. todos:newtodos
  40. });
  41.  
  42. }
  43.  
  44. addItem(value){
  45. this.state.todos.unshift(
  46. {
  47. id:this.ids++,text:value,time:(new Date()).toLocaleString(),done:0
  48. }
  49. )
  50.  
  51. this.setState({
  52. todos:this.state.todos
  53. });
  54.  
  55.  
  56.  
  57. }
  58.  
  59. render(){
  60. return (
  61. <div className="container">
  62.  
  63. <br/>
  64. <br/>
  65. <br/>
  66. <br/>
  67. <div className="panel panel-default">
  68. <div className="panel-headingbg-danger">
  69. <h1 className="text-center ">ToDo <small>你要做什么?</small></h1>
  70. <hr/>
  71. </div>
  72. <div className="panel-body">
  73. <TodoForm addItem={this.addItem}/>
  74. <TodoList okItem={this.okItem} deleteItem={this.deleteItem} data={this.state.todos}/>
  75. </div>
  76. </div>
  77. </div>
  78. );
  79. }
  80. }
  81.  
  82. export default TodoApp;
TodoList.js
  1. import React from 'react';
  2.  
  3. import TodoItem from './TodoItem';
  4. class TodoList extends React.Component{
  5. render(){
  6. let todos=this.props.data;
  7. let todoItems=todos.map(item=>{
  8. return <TodoItem okItem={this.props.okItem} deleteItem={this.props.deleteItem} key={item.id} data={item}/>
  9. });
  10.  
  11.  
  12. return (
  13. <table className="table table-striped">
  14. <thead>
  15. <tr>
  16. <th>内容</th>
  17. <th>时间</th>
  18. <th>状态</th>
  19. <th>操作</th>
  20. </tr>
  21. </thead>
  22. <tbody>
  23. {todoItems}
  24. </tbody>
  25. </table>
  26.  
  27.  
  28. );
  29. }
  30. }
  31.  
  32. export default TodoList;
TodoItem.js
  1. import React from 'react';
  2.  
  3.  
  4. class TodoItem extends React.Component{
  5.  
  6. delete(){
  7. this.props.deleteItem(this.props.data.id);
  8. }
  9. complete(){
  10. console.log(this);
  11. this.props.okItem(this.props.data.id);
  12. }
  13. render(){
  14.  
  15.  
  16. let {text,time,done,id}=this.props.data;
  17.  
  18. return (
  19. <tr>
  20. <td>{text}</td>
  21. <td>{time}</td>
  22. <td>{done==0?"未完成":"完成"}</td>
  23. <td>
  24. <a className="btn btn-primary" onClick={this.delete.bind(this)}>删除</a>
  25. <a className="btn btn-success" onClick={this.complete.bind(this)}>
  26. 完成
  27. </a>
  28. </td>
  29. </tr>
  30.  
  31.  
  32. );
  33. }
  34. }
  35.  
  36. export default TodoItem;
TodoForm.js
  1. import React from 'react';
  2.  
  3.  
  4. class TodoForm extends React.Component{
  5. tijiao(event){
  6. event.preventDefault();
  7. }
  8. add(event){
  9. if(event.type=="keyup"&&event.keyCode!=13){
  10. return false;
  11. }
  12.  
  13. let txt=this.refs.txt.value;
  14.  
  15. if(txt=="") return false;
  16. this.props.addItem(txt);
  17.  
  18.  
  19. this.refs.txt.value="";
  20. }
  21. render(){
  22. return(
  23. <form className="form-horizontal" onSubmit={this.tijiao.bind(this)}>
  24. <div className="form-group">
  25. <div className="col-sm-10">
  26. <input ref="txt" type="text" className="form-control" onKeyUp={this.add.bind(this)} id="exampleInputName2" placeholder="请输入内容"/>
  27. </div>
  28. <div className="col-sm-2">
  29. <button type="button" className="btn btn-primary" onClick={this.add.bind(this)}>添加</button>
  30. </div>
  31. </div>
  32.  
  33. </form>
  34. );
  35. }
  36. }
  37. export default TodoForm;
都写完之后就可以看看我们的index.html,html里的代码没有变动,和昨天的都是一样
  1. <body>
  2. <div id="app">
  3. </div>
  4. <script src="/assets/bundle.js"></script>
  5. </body>
都完成之后就来看一下我们的结果,当点击添加的时候回添加上信息,直接按Enter也会添加消息,当点击删除就会删除已在的消息,点击完成的时候未完成的信息就会显示成完成

猜你在找的React相关文章