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

感谢你读到这里。

这座小站更像一份持续维护的“终端笔记”:记录我解决问题的过程,也记录走过的弯路。

如果这篇内容对你有一点点帮助:

  • 点个赞 / 收藏一下,方便你下次回来继续翻
  • 欢迎在评论区补充你的做法(或者指出我的疏漏)
  • 想持续收到更新:可以订阅 RSS(在页面底部)

我们下篇见。


More Posts

评论

评论 (0)

请先登录后再发表评论

加载中...