react实现发表评论

将评论和暂无评论渲染到评论列表中并优化代码,如图:

              

    

首先将数据存储到state中:

state = {

    comments: [

      {id:1,name:'zzf',value:'妹妹好阔爱啊!!!'},

      {id:2, name:'zjl', value:'周董的歌好好听啊!!!'},

      {id:3,name:'hg',value:'胡歌演技贼好!!!'}

    ]}

然后写一个函数来实现渲染:renderList(){
  const {comments} = this.state

  //判断评论列表长度是否为零,若为零则渲染暂无评论

if(comments.length === 0){

        return <div>暂无评论,快去评论吧~</div>

}

  return(

    <ul>

   {comments.map(item => (

<li key = {item.id}>

    <h3>评论人:{item.name}</h3>

   <p>评论内容:{item.value}</p>

</li>

</ul>

)

}

在render里面调用这个函数:

render() {

    const { userComt,userName} = this.state

    return(

      <div className='box'>

        <div className='box1'>

          <input type='text' value={userName} name='userName' onChange={ this.changeForm}/>

          <textarea rows='10' cols='30' value={userComt} name='userComt' onChange={ this.changeForm}></textarea>

          <button onClick={ this.change}>发表评论</button>

        </div>

        { this.renderList()}

      </div>

      

    )

  }

}

第二步:获取评论信息

            changeForm = (e) => {
                const {name.value} = e.target

                this.setState({

                   [name]:value

                })

在文本框中调用该函数

第三步:发表评论

         addContent = () => {

                   const {comments,userComt,userName} = this.state

                   //校验是否为空

                   if(userComt.trim() === '' || userName.trim() === ''){

                         alert('请输入内容')

                         return//阻止函数继续执行

                    }

                    const newComments = [

                           {

                               id:Math.random(),

                              name:userName,

                              value:userComt

                             },

                           ...comments

                    ]

                this.setState({

                      comments:newComments

                     //清除文本内容

                     userName:' '

                     userComt:' '

                })

         }
                  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以实现自动定位未填项的功能,具体实现方式如下: 1. 首先,在表单中添加一个 ref 属性,用于获取表单的实例。 2. 在表单提交的回调函数中,通过表单实例的 getFieldsError() 方法获取所有未填项的错误信息。 3. 如果存在未填项的错误信息,则遍历所有表单项,通过 getFieldDecorator() 方法获取表单项的装饰器,并调用装饰器的 validateFields() 方法,触发表单项的校验。 4. 在校验完成后,通过表单实例的 getFieldInstance() 方法获取表单项的实例,并调用其 focus() 方法,使其获得焦点。 5. 最后,将表单滚动到未填项所在的位置,使用户能够看到未填项。 以下是代码实现的示例: ```javascript import React, { Component } from 'react'; import { Form, Input, Button } from 'antd'; class MyForm extends Component { formRef = React.createRef(); handleSubmit = e => { e.preventDefault(); this.formRef.current.validateFields((errors, values) => { if (errors) { const fieldsError = this.formRef.current.getFieldsError(); const firstErrorField = Object.keys(fieldsError).find(field => fieldsError[field]); const firstErrorNode = this.formRef.current.getFieldInstance(firstErrorField); firstErrorNode.focus(); const formNode = this.formRef.current.getFormNode(); formNode.scrollTo({ top: firstErrorNode.offsetTop - formNode.offsetTop, behavior: 'smooth' }); } // 如果校验通过,则可以在这里提交表单数据 }); }; render() { return ( <Form ref={this.formRef} onSubmit={this.handleSubmit}> <Form.Item label="姓名" name="name" rules={[ { required: true, message: '请输入姓名' } ]} > <Input /> </Form.Item> <Form.Item label="年龄" name="age" rules={[ { required: true, message: '请输入年龄' } ]} > <Input /> </Form.Item> <Form.Item> <Button htmlType="submit">提交</Button> </Form.Item> </Form> ); } } export default MyForm; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值