簡體   English   中英

在 React 中為 HTML 標簽生成隨機類名的問題

[英]Problems generating random classNames for HTML tags in React

大家好!

這可能是一個愚蠢的問題,但我無法弄清楚為什么 console.log 中的 className 變量與<p>的 className 屬性中使用的值不同。

我正在嘗試為 HTML 標簽生成隨機 class 名稱,這樣我就可以使用這些 HTML 標簽的規則創建 CSSStyleSheets。 因為在這個例子中,css 屬性是一樣的,所以樣式是一樣的,但是標簽和 console.log 中的 className 變量是不同的,這就是我不明白的原因。

我是否遺漏了一些明顯的東西,或者這是某種預期的行為?

代碼是這樣的:

import React from 'react'

const constructCss = (css) => {
  const style = document.createElement('style')
  document.head.appendChild(style)
  style.appendChild(document.createTextNode(css))
}

const constructCssStyleAndReturnClassName = (css) => {
  const generateRandomString = (length=6) => Math.random().toString(20).substr(2, length)
  const className = `styled-${generateRandomString(8)}`
  constructCss(`.${className} ${css}`)
  return className
}

const Pa = ({css, children}) => {
  const className = constructCssStyleAndReturnClassName(css)
  console.log('Rendering with className: ', className)
  return <p className={className}>{children}</p>
}

export default function App() {
  return (
    <div className="App">
      <Pa css={`{ background-color: blue; color: white }`}>Helloooooo</Pa>
    </div>
  );
}

它也在代碼沙盒

提前致謝:)

代碼沙箱似乎太慢了,無法使用console.log捕獲它,但如果您在Pa組件中設置調試器(或console.count ),您將看到您獲得 2 個渲染,這意味着您獲得兩個不同的隨機 class 名稱。 我猜它會記錄第一個,然后使用第二個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM