当前位置:首页>编程日记>正文

create-react-app留言板

本站寻求有缘人接手,详细了解请联系站长QQ1493399855

create-react-app留言板

搭建环境

  • 创建package.json文件

npm init -y

  • 安装create-react-app

npm install -g create-react-app

  • 使用命令创建myapp目录

create-react-app myapp
  • 进入myapp目录

cd myapp  
  • 运行

npm start

它会自动跳转到页面:

create-react-app留言板 配图01

  • 安装loder

npm install sass-loader node-sass --save-dev

修改项目

  • 删除不需要的项目

  • 修改完以后的项目目录
    create-react-app留言板 配图02

编写程序

因为我们这里会用到Bootstarp,所以我们需要先下载一个样式库;

  • 下载Bootstarp样式库

官网网址:
http://v3.bootcss.com/getting-started/#download
直接在浏览器打开就可以,打开以后会出现以下页面,点击第一个,下载Bootstrap就可以;

create-react-app留言板 配图03

  • 创建index.js文件

import React from 'react';
import ReactDOM from 'react-dom';
import LiuYanapp from './LiuYanapp';import './bootstrap/css/bootstrap.min.css';  //引入样式文件
ReactDOM.render(<LiuYanapp/>,document.getElementById("app"));      //输出到页面
  • 创建LiuYanapp.js文件

import React from 'react';import LiuYanList from './LiuYanList';
import LiuYanForm from './LiuYanForm';class LiuYanapp extends React.Component{constructor(props){super(props);this.ids=1;this.state={todos:[]};this.addItem=this.addItem.bind(this);this.deleteItem=this.deleteItem.bind(this);}deleteItem(id){let newtodos=this.state.todos.filter((item)=>{return !(item.id==id)});this.setState({todos:newtodos});}addItem(value){this.state.todos.unshift({id:this.ids++,text:value,time:(new Date()).toLocaleString(),done:0})this.setState({todos:this.state.todos});   }render(){return (<div className="container"><br/><br/><br/><br/><div className="panel panel-default"><div className="panel-headingbg-danger"><hr/></div><div className="panel-body">           <h1 className="text-center ">留言板</h1><LiuYanList deleteItem={this.deleteItem} data={this.state.todos}/><LiuYanForm addItem={this.addItem}/> </div></div> </div>         );}
}export default LiuYanapp;
  • 创建LiuYanForm.js文件

import React from 'react';class LiuYanForm extends React.Component{tijiao(event){event.preventDefault();}add(event){        if(event.type=="keyup"&&event.keyCode!=13){return false;}let txt=this.refs.txt.value;if(txt=="") return false;       this.props.addItem(txt);this.refs.txt.value="";}render(){return(<form className="form-horizontal" onSubmit={this.tijiao.bind(this)}><div className="form-group"><div className="col-sm-10"><input ref="txt"  type="text" className="form-control" onKeyUp={this.add.bind(this)} id="exampleInputName2" placeholder="请输入留言内容"/></div><div className="col-sm-2"><button type="button" className="btn btn-primary" onClick={this.add.bind(this)}>留言</button></div>               </div>           </form>);}
}
export default LiuYanForm;
  • 创建LiuYanItem.js文件

import React from 'react';class LiuYanItem extends React.Component{delete(){this.props.deleteItem(this.props.data.id);}render(){let {text,time,done,id}=this.props.data;return (<tr><td>{text}<br/><br/>{time}</td><td><a className="btn glyphicon glyphicon-remove btn-danger" onClick={this.delete.bind(this)}>删除留言</a></td></tr>);}
}export default LiuYanItem;
  • 创建LiuYanList.js文件

import React from 'react';import LiuYanItem from './LiuYanItem';
class LiuYanList extends React.Component{render(){let todos=this.props.data;let todoItems=todos.map(item=>{return <LiuYanItem deleteItem={this.props.deleteItem} key={item.id} data={item}/>});return (<table className="table table-striped"><thead><tr><th>留言</th>                       </tr></thead><tbody>{todoItems}</tbody>              </table>);}
}export default LiuYanList;
  • 创建webpack.config.js文件

module.exports = {entry: './index.js',output: {path:path.resolve(__dirname,"build"),publicPath:"/assets/",filename: 'bundle.js'},module: {rules: [{ test: /.js$/, exclude: /node_modules/, loader: "react-hot-loader!babel-loader" },{ test: /.css$/, exclude: /node_modules/, 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" } //添加]} 
}    
  • 输入命令,运行页面

npm start

现在我们的页面就完成了,现在的目录:

create-react-app留言板 配图04

运行页面

  • 接下来就让我们看看效果吧!
    create-react-app留言板 配图05


http://www.coolblog.cn/news/5f754c0d4a3531c1.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • mysql commit 机制_1024MySQL事物提交机制
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • 2019-9
  • jquery 使用小技巧
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Django View(视图系统)
  • 【设计模式】 模式PK:策略模式VS状态模式
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 最新DOS大全
  • 阿里巴巴分布式服务框架 Dubbo
  • 阿里大鱼.net core 发送短信
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 程序员入错行怎么办?
  • Arm芯片的新革命在缓缓上演
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • 《看透springmvc源码分析与实践》读书笔记一
  • 通过Spark进行ALS离线和Stream实时推荐
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • 行为模式之Template Method模式