留言板案例简单版

import React, { Component } from 'react'
import "./css/App.css"

export default class App extends Component {
  state = {
    username: '',
    txt: '',
    list: []
  }
  // 受控组件
  handleChange(ev) {
    const target = ev.target;
    this.setState({
      [target.name]: target.value
    })
  }
  // 渲染留言
  renderLiuyan() {
    const { list } = this.state;
    return list.map((item, index) => (
      <li key={ index }>
        <span>{item.username}</span>
        <span className='content'>{ item.txt }</span>
        <button onClick={ () => this.send(index) }>回复</button>
        <ul>
          {
            item.info.map((item2, index2) => (
              <li key={ index2 }>{ item2 }</li>
            ))
          }
        </ul>
      </li>
    ))
  }
  // 提交留言
  submit() {
    const { username, txt, list } = this.state;
    this.setState({
      list: [ { id: Date.now(), username, txt, info: [] }, ...list ],
      username: '',
      txt: ''
    })
  }
  // 回复留言
  send(idx) {
    const copyList = [ ...this.state.list ];
    copyList[idx].info.push(this.state.txt);
    this.setState({
      list: copyList,
      txt: ''
    })
  }
  render() {
    const { username, txt } = this.state
    return (
      <div>
        <input type="text" name="username" value={ username } onChange={ ev => this.handleChange(ev) } autoComplete='off' /> <br />
        <textarea name="txt" value={ txt } onChange={ ev => this.handleChange(ev) }></textarea> <br />
        <button onClick={ () => this.submit() }>提交留言</button>
        <hr />

        <ul>{ this.renderLiuyan() }</ul>
        
      </div>
    )
  }
}

以下是一个简单JS 留言板案例: HTML 代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JS 留言板</title> </head> <body> <h1>JS 留言板</h1> <form> <input id="name" type="text" placeholder="姓名" required> <br> <textarea id="message" placeholder="留言" required></textarea> <br> <button type="submit">提交</button> </form> <hr> <ul id="messages"></ul> <script src="main.js"></script> </body> </html> ``` JS 代码: ```js const form = document.querySelector('form'); const nameInput = document.querySelector('#name'); const messageInput = document.querySelector('#message'); const messagesList = document.querySelector('#messages'); let messages = []; form.addEventListener('submit', function(event) { event.preventDefault(); const name = nameInput.value; const message = messageInput.value; const timestamp = Date.now(); const newMessage = { name, message, timestamp }; messages.push(newMessage); displayMessages(); form.reset(); }); function displayMessages() { messagesList.innerHTML = ''; for (const message of messages) { const li = document.createElement('li'); const date = new Date(message.timestamp); const dateString = date.toLocaleString(); li.innerHTML = `<strong>${message.name}:</strong> ${message.message} ${dateString}`; messagesList.appendChild(li); } } ``` 该案例使用了 HTML、CSS 和 JavaScript 技术,实现了一个基本的留言板功能。用户可以输入姓名和留言,并提交到留言板上。留言板会显示所有已提交的留言,包括留言者姓名、留言内容和留言时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值