04.React组件基础案例

案例:需求分析

1.渲染评论列表(列表渲染)
2.没有评论数据时渲染:暂无评论(条件渲染)
3.获取评论信息,包括评论人和评论内容(受控组件)
4.发表评论,更新评论列表(setState())

案例:实现步骤

1.渲染评论列表

1.在state 中初始化评论列表数据
2.使用数组的map方法遍历state中的列表数据
3.给每个被遍历的li元素添加key属性

2.渲染暂无评论

1.判断列表数据的长度是否为0
2.如果为0,则渲染暂无评论

3.获取评论信息

1.使用受控组件的方式处理表单元素

4.发表评论

1.给按钮绑定单机事件
2.在事件处理程序中,通过state获取评论信息
3.将评论信息添加到state中,并调用setState()方法更新state
4.边界情况:清???文本框
5.边界情况:非空判断

完整代码

class App extends React.Component{
    //初始化状态
   state={
       components:[
        {id:1,name:'jack',content:'沙发!!!'},
        {id:2,name:'rose',content:'板凳'},
        {id:3,name:'tom',content:'楼主好人'}
       ],
       //评论人
       userName:'',
       //评论内容
       userContent:''

   }
   //渲染评论列表
   renderList(){
       const {components} = this.state
       if(components.length === 0){
           return <div className="no-comment">暂无评论,快去评论吧</div>
       }
       return(
            <ul>
                {components.map(item=>(
                     <li key={item.id}>
                         <h3>评论人:{item.name}</h3>
                         <p>评论内容:{item.content}</p>
                     </li>
                ))}

             </ul>
       )
   }
   //处理表单元素值
   handleFrom = e =>{
       const {name,value} = e.target
       this.setState({
           [name]:value
       })
   }
   //发表评论
   addComment = () =>{
       const {components,userName,userContent} = this.state

       //非空校验
       if(userName.trim() ===''|| userContent.trim() ===''){
           alert('请输入评论人和评论内容')
           return
       }
       const newComponents = [{
           id:Math.random(),
           name:userName,
           content:userContent
       },...components]

       //文本框的值如何清空?要清空文本框只需要将其对应的state清空即可
       this.setState({
        components:newComponents,
        userName:'',
        userContent:''
       })

   }
    render(){
        const {userName,userContent} = this.state
        return(
            <div className="app">
               <div>
                   <input value={userName} className="user" type="text" placeholder="请输入评论人" name="userName" onChange={this.handleFrom}/>
                   <br/>
                   <textarea value={userContent} className="content" cols="30" rows="10" placeholder="请输入评论内容" name="userContent" onChange={this.handleFrom}></textarea>
                   <br/>
                   <button onClick={this.addComment}>发表评论</button>
               </div>
               {/* 通过条件渲染决定渲染什么内容 */}
               {this.renderList()}
            </div>

        )
    }
}

原文地址:https://www.cnblogs.com/foreverLuckyStar/p/12241717.html

时间: 2024-08-29 23:31:23

04.React组件基础案例的相关文章

03.React组件基础

React组件介绍 1.组件是React 的一等公民.使用React就是在用组件 2.组件表示页面中的部分功能 3.组合多个组件实现完整的页面功能 4.特点:可复用,独立,可组合 React组件的两种创建方式 1.使用函数创建组件 //函数组件:使用JS 的函数(或箭头函数)创建的组件 //约定1:函数名称必须以 大写字母开头 //约定2:函数组件 必须有返回值,表示该组件的结构 //如果返回值为null,表示不渲染任何内容 function Hello(){ return( <div>这是我

React组件略讲

React是前端组件化开发的开山鼻祖,这种开发方式彻底解决了的前端组件复用的痛点.今天,就来研究一下React组件开发. 前端同学一般都会从Vue入门,因为Vue使用的<template>的组件开发方式让前端人员更容易的平滑过渡.Vue的组件很简单,一般来说,一个.vue文件就是一个组件.就像webpack的模块化开发,一个文件就是一个组件.我们在使用组件时也很容易,通过 ES6 的import导入.注册(components),就可以直接使用. 上面简单说了Vue的组件模式,其实,React

&lt;EDEM 基础案例04&gt;Dynamic Domain

本案例包括以下几部分: 介绍 前提 问题描述 设置和求解 后处理 1-介绍 动态计算域(Dynamic Domain)是一种高效模拟大型颗粒床的方法,通过指定局部计算区域,减少计算时间. 案例重点: 2 建立动态计算域: 2 改变颗粒透明度: 2 设置跟踪几何体的相机: 2 设计录像: 2-前提 本案例假定用户熟悉Windows软件界面风格,并对EDEM界面较为熟悉. 3-问题描述 犁地模拟,设置一个运动的刀片,刀片会和颗粒床作用.为了加快模拟速度,在和刀片作用的颗粒区域设置动态计算域,动态计算

React.js 基础入门三 ---组件状态state

React 组件实例在渲染的时候创建.这些实例在接下来的渲染中被重复使用,可以在组件方法中通过 this 访问.唯一一种在 React 之外获取 React 组件实例句柄的方式就是保存React.render 的返回值.在其它组件内,可以使用 refs 得到相同的结果(后面会简单解释refs). 从上几章的学习,我们可以这么理解组件,学过php的Yii框架的都知道widget组件,react.js定义一个组件,通过在组件中定义各种'方法','属性'最后通过render来渲染这个组件. 其中<组建

Flux --&gt; Redux --&gt; Redux React 入门 基础实例使用

本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推荐使用 ES6+React+Webpack 的开发模式,但Webpack需要配置一些东西,你可以先略过,本文不需要Webpack基础 入门,只是一些基础概念和用法的整理,更完整的内容推荐去看看文档,英文,中文 (不过我个人认为,官方文档的例子相对来说太复杂了,很难让新手马上抓住重点) (官方的例子正

二、React初体验之React组件创建

(中间因为应付各种考试,处理其他事情,隔了好时间没更新,现在终于有时间了,续上!) 本文为React初始体验,因此先不考虑文件如何组织,尽量以最简单的方式让大家了解React其中的原理. 在创建组件(component)之前,大家首先需要了解一些基础知识.有ES6.JSX语法等基础知识的同学请跳过下面一段. ES6是JavaScript的最新标准,里面新增了许多语法方式,甚至出现了“类”的继承方式,我个人暂且把他们理解为新增了许多“语法糖”,这些“语法糖”可能带给老手的是方便,而对于我们这些菜鸟

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】

本文提供一个基于ADF Face组件开发样例工程,实现表格开发中常见的处理: 1.Map对象+Bean对象填充表格的数据行. 2.使用静态列.动态列.嵌套列的实现方法. 3.介绍表格中表单组件的使用方法. 4.介绍表格单行选中事件的处理过程. 本文是基于"ADF Faces 表格应用基础案例一:应用List<Class>填充文本表格"编写的,会省去许多细节部分的介绍. 实现的基本思路: 将样例工程的创建过程分为几个小的阶段,每个阶段实现了不同的目标. 第一阶段: 表格数据:

React JS 基础知识17条

1. 基础实例 <!DOCTYPE html> <html> <head> <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="../build/browser.min.js"></script&g

React Native基础与入门(二)--初识React Native

React Native组件 React Native是用React Native框架来组建Android和IOS App的技术,那么React Native组件就是React组件.React组件让你将UI分割成独立的.可重用的一些碎片或部分,这些部分都是相互独立的. 创建组件的三种方式 1.ES6创建组件的方式 export default class HelloComponent extends Component { render() { return <Text style={{font