当前位置: 首页 > news >正文

create-react-app做的留言板

create-react-app做的留言板

先看一下我们的留言板,然后在去实现功能

图片描述

做留言板首先要配置好我们的文件,然后才能接着做我们的留言板

快速开始:

npm install -g create-react-app       /* 安装create-react-app,建议使用cnpm */

create-react-app myapp                 /* 使用命令创建应用,myapp为项目名称 */

cd myapp                                        /* 进入目录,然后启动 */

npm start

接下来看看我们的代码吧

index.html
<body>
    <div id="app">
        
    </div>
    <script src="/assets/bundle.js"></script>
</body>
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import LiuApp from './LiuApp';

import './bootstrap/dist/css/bootstrap.min.css';

ReactDOM.render(<LiuApp/>,document.getElementById("app")); 
LiuApp.js
import React from 'react';

import LiuList from './LiuList';
import LiuForm from './LiuForm';

class LiuApp 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">
                            <h1 className="text-center ">留言板</h1>
                            <hr/>
                    </div>
                    <div className="panel-body">
                             <LiuList deleteItem={this.deleteItem} data={this.state.todos}/>
                             <LiuForm addItem={this.addItem}/>
                    </div>
                </div> 
            </div>
          
        );
    }
}

export default LiuApp;
LiuList.js
import React from 'react';

import LiuItem from './LiuItem';
class LiuList extends React.Component{
    render(){
        let todos=this.props.data;
       
        let todoItems=todos.map(item=>{
            return <LiuItem 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 LiuList;
LiuForm.js
import React from 'react';


class LiuForm 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 LiuForm;
LiuItem.js
import React from 'react';


class LiuItem extends React.Component{

    delete(){
        this.props.deleteItem(this.props.data.id);
    }
    render(){


        let {text,time,done,id}=this.props.data;

        return (
           <tr>
               <td>{time}<br/><br/>{text}</td>

                <td>
                    <br/>
                    <br/>
                   <a onClick={this.delete.bind(this)}>删除留言</a>
                </td>
           </tr>


        );
    }
}

export default LiuItem;
以上就是多有的代码,现在看看我们最终的结果

图片描述

相关文章:

  • 中国式社交网络就一个“约”字而已
  • 测试人员的GitHub
  • 《企业级ios应用开发实战》一3.7 本章小结
  • GeekPwn黑客选手任意操纵智能烤箱 智能家居存隐患
  • 迈克菲报告指出网络威胁情报共享的阻碍
  • iOS开发-图片浏览器(优化)
  • 微软公司笔试题_附上源码解决
  • 本杰明·富兰克林会怎样学习编程?
  • WCF 消息帧格式
  • 《SEO的艺术(原书第2版)》——3.6 为原始流量开展SEO
  • PHP开发:使用PHP抓取百万知乎用户以及知识点札记
  • 在人才竞争上,国内明星公司都使用哪些手段抢 AI 人才
  • 工控安全要避开传统IT安全思路的几个“暗坑”
  • 助阵智能化环境监控 长虹佳华推CHEWS无线管理解决方案
  • 一个不错的GO语言SHA/MD5加速库
  • android 一些 utils
  • CentOS 7 修改主机名
  • IP路由与转发
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • mongo索引构建
  • Netty 4.1 源代码学习:线程模型
  • node-glob通配符
  • Vue2.0 实现互斥
  • vue脚手架vue-cli
  • vue--为什么data属性必须是一个函数
  • 安装python包到指定虚拟环境
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 多线程 start 和 run 方法到底有什么区别?
  • 如何优雅地使用 Sublime Text
  • 深度解析利用ES6进行Promise封装总结
  • 数据科学 第 3 章 11 字符串处理
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Android开发者必备:推荐一款助力开发的开源APP
  • #define,static,const,三种常量的区别
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)SpringCloud 整合Python
  • (52)只出现一次的数字III
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (一) springboot详细介绍
  • (转)可以带来幸福的一本书
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net MVC4 上传大文件,并保存表单
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET实现之(自动更新)
  • .NET委托:一个关于C#的睡前故事
  • .net项目IIS、VS 附加进程调试
  • /var/log/cvslog 太大
  • @ConditionalOnProperty注解使用说明
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ 第一章] JavaScript 简史
  • [ 手记 ] 关于tomcat开机启动设置问题