# react-component

1 min read
Table of Contents

react组件的定义

点击添加信息
import { useState } from 'react'
import ReactDOM from 'react-dom/client'
export default function ComponentDemo() {
  const [count, setCount] = useState(0)
  return (
    <div
      className="w-36 h-16 bg-amber-300 rounded-sm flex items-center justify-center text-[#242424] cursor-pointer"
      onClick={() => {
        setCount(count + 1)
        message(`这个是第${count}条消息`)
      }}
    >
      点击添加信息
    </div>
  )
}

const Message = ({ message }: { message: string }) => {
  return <div>{message}</div>
}
const queue: Item[] = []
interface Item {
  messageContainer: HTMLDivElement
  root: ReactDOM.Root
}
const message = (message: string) => {
  const messageContainer = document.createElement('div')
  messageContainer.className =
    'message-container fixed m-[0_auto] bg-white text-black p-4 rounded-md left-1/2 z-[100] mb-4'
  messageContainer.style.top = `${queue.length * 70}px`
  document.body.appendChild(messageContainer)
  const root = ReactDOM.createRoot(messageContainer)
  root.render(<Message message={message} />)
  queue.push({
    messageContainer,
    root,
  })
  setTimeout(() => {
    const item = queue.find((item) => item.messageContainer === messageContainer)
    if (item) {
      item.root.unmount()
      document.body.removeChild(item.messageContainer)
      queue.splice(queue.indexOf(item), 1)
    }
  }, 2000)
}

组件通信

card1
card2
import Card from './Card'

export default function App() {
  return (
    <>
      <Card title="card1"></Card>
      <Card title="card2"></Card>
    </>
  )
}

受控组件与非受控组件

定义

使用场景

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments