【 React -- 2/100 】使用React实现评论功能
React| 组件化 | 递归 | 生成唯一ID
    需要探究一下 .find() 和 findIndex() 的区别
import React from  'react'
import './commentsDemo.css'
class CommentsDemo extends React.Component{
    // 初始化状态
    state = {
        comments: [
            { id: 1, name: 'cnyangx', content: '前排出售瓜子、汽水、辣条!!!' },
            { id: 2, name: '大脸猫', content: '沙发~' },
            { id: 3, name: '老张', content: '我有酒,你有故事吗' }
        ],
        userName: '',
        userContent: ''
    };
    handleForm =  (e) => {
        this.setState({
            [e.target.name] : e.target.value
        })
    };
    // 验证id唯一性
    verifyID = () => {
        const newID = Math.floor(Math.random() * 100000);
        const flag = this.state.comments.find( item => item.id === newID);
        console.log(flag)
        if(flag === -1){
            this.verifyID()
        }
        return newID;
    };
    // 发表评论
    publishComments = () => {
        const {comments, userName, userContent} = this.state;
        if(userName.trim()==='' || userContent.trim() === ''){
            alert('请输入内容');
            return
        }
        // 将新的评论添加到集合中
        const newComments = [
            {
                id: this.verifyID(),
                name: userName,
                content: userContent
            },
            ...comments
        ];
        console.log(newComments);
        this.setState({
            comments: newComments
        })
    };
    renderList = () => {
        return this.state.comments.length === 0 ?
            (<div className="no-comments">暂无评论,快去抢沙发吧!</div>) :
            (
                <ul>
                    {
                        this.state.comments.map(item => (
                            <li key={item.id}>
                                <h4>评论人: {item.name}</h4>
                                <p>评论内容:{item.content}</p>
                            </li>
                        ))
                    }
                </ul>
            )
    };
    render() {
        const {userName, userContent} = this.state;
        return (
            <div className="app">
                <div>
                    <input type="text"
                           name="userName"
                           value={userName}
                           onChange={this.handleForm}
                           className="user"
                           placeholder="请输入评论人"/>
                    <br/>
                    <textarea name="userContent"
                              className="content"
                              value={userContent}
                              onChange={this.handleForm}
                              cols="30" rows="10"
                              placeholder="请输入评论内容">
                    </textarea>
                    <br/>
                    <button onClick={this.publishComments}>发表评论</button>
                </div>
                {/*    渲染评论列表  使用三元表达式 */}
                {  this.renderList() }
            </div>
        )
    }
}
// 导出
export default CommentsDemo;
    使用ReactDOM.render( <CommentsDemo />, document.getElementByID('root))
    渲染组件

【 React -- 2/100 】使用React实现评论功能的更多相关文章
- 【React  8/100】 React路由
		React路由 React路由介绍 现代的前端应用大多数是SPA(单页应用程序),也就是只有一个HTML页面的应用程序.因为它的用户体验更好.对服务器压力更小,所以更受欢迎.为了有效的使用单个页面来管 ... 
- 【React  6/100】 React原理 | setState | JSX语法转换 | 组件更新机制
		****关键字 | setState | JSX语法转换 | 组件更新机制 组件更新机制 setState() 的两个作用 修改state 更新组件 过程:父组件重新渲染时,也会重新渲染子组件,但只会 ... 
- 【 React - 1/100 】React绑定事件this指向问题--改变state中的值
		/** * 报错: * Cannot read property 'setState' of undefined * 原因: this指向不一致.btnAddCount中的this 和render中的 ... 
- React.js 小书 Lesson25 - 实战分析:评论功能(四)
		作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson25 转载请注明出处,保留原文链接和作者信息. (本文未审核) 目前为止,第二阶段知识已经基本 ... 
- React.js 小书 Lesson16 - 实战分析:评论功能(三)
		作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson16 转载请注明出处,保留原文链接和作者信息. 接下来的代码比较顺理成章了.修改 Commen ... 
- React.js 小书 Lesson14 - 实战分析:评论功能(一)
		作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson14 转载请注明出处,保留原文链接和作者信息. 课程到这里大家已经掌握了 React.js 的 ... 
- React+后端实现导出Excle表格的功能
		最近在做一个基于React+antd前端框架的Excel导出功能,我主要在后端做了处理,根据以下步骤,可以很容易就实现导出Excel表格数据的功能. 在做这类导出文件的功能,其实,在后端进行处理,会更 ... 
- React Editor 应用编辑器(1) - 拖拽功能剖析
		这是可视化编辑器 Gaea-Editor 的第一篇连载分析文章,希望我能在有限的篇幅讲清楚制作这个网页编辑器的动机,以及可能带来的美好使用前景(画大饼).它会具有如下几个特征: 运行在网页 文档流布局 ... 
- 4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>
		Rails5.1增加了Webpacker: Webpacker essentially is the decisions made by the Rails team and bundled up i ... 
- React-Native(三):React Native是基于React设计的
		React Native是基于React js设计的. 参考:<React 入门实例教程> React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript ... 
随机推荐
- _vimrc
			set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set ... 
- (转载)Kaggle_Titanic生存预测 -- 详细流程吐血梳理
			Kaggle_Titanic生存预测 -- 详细流程吐血梳理 https://blog.csdn.net/Koala_Tree/article/details/78725881 Kaggle中Tita ... 
- spring cloud:feign-hystrix
			producer 1. File-->new spring starter project 2.add dependency <dependency> <group ... 
- java 强弱软虚 四种引用,以及用到的场景
			1.利用软引用和弱引用解决OOM问题:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的 ... 
- 接入集团auth流程
			前言 一直对集团的auth系统很感兴趣,所以这次记录下接入集团auth的流程.如果后期有时间,会补充具体的auth实现细节. 正文 一.实现思想 1. 实现思想 明确几个名词:接入方,管理方.接入方指 ... 
- Mybaits基本的CURD操作
			1 首先在Mapper.xml配置 <!-- parameterType:参数类型,可以省略, 获取自增主键的值: mysql支持自增主键,自增主键值的获取,mybatis也是利用stateme ... 
- flask + celery实现定时任务和异步
			参考资料: Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest ... 
- ARTS-2
			ARTS的初衷 Algorithm:主要是为了编程训练和学习.每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard).进行编程训练,如果不训练你看再多的算法 ... 
- linux系统中不小心执行了rm -rf ./* 怎么办?解决:文件系统的备份与恢复
			XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据.xfsdump 按inode顺序备份一个XFS文件系统.centos7选择xfs格式作为默认文件系统,而且不 ... 
- Nginx代理自动上线下线
			Nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一 ... 
