reactjs 我想在React.js中使用输入type=“color”将十六进制颜色转换为RGB颜色

cgfeq70w  于 2023-01-25  发布在  React
关注(0)|答案(2)|浏览(323)

我想实现的是我想转换十六进制格式的颜色为RGB颜色,并作出POST请求与输入类型=“颜色”。

问题/错误消息

hexToRGB()的内容总是[0,0,0],我不能改变颜色。当我移动颜色选择器时,console.log(e.target.value)在控制台中显示为#944242(示例),所以我确信可以工作。我不知道如何在React.js中使用input type=“color”将十六进制颜色转换为RGB颜色
我参考以下链接,但没有工作...
https://codepen.io/urosurosevic/pen/pagxYE

const LightDetailCondo = () => {

  const [hex_value, setHexValue] = useState("#fffff");
  
  const hexToRGB = (hex_value) => {
     hex_value = '0x' + hex_value
     let r = hex_value >> 16 & 0xFF
     let g = hex_value >> 8 & 0xFF
     let b = hex_value & 0xFF
     return `[${r}, ${g}, ${b}]`
  }

  const handleSliderChange2 = (e) => {
    lightOn(e.target.value)
    setHexValue(e.target.value)
    console.log(e.target.value)
    
  }

  console.log(hexToRGB())

  const lightOn = async() => {
    console.log("Body sent to server", {
    rgb_color: hexToRGB(),
  })
    await axios.post('xxx.com',
      {
        rgb_color: hexToRGB(),
      },
      {
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${cookies.get('accesstoken')}`
        },
      })
      .then(result => {
        console.log('Color Changed!');
      })
      .catch(err => {
        console.log('Missed Color Changed!');
      });
  }


    useEffect(() => {

      }, []);


  return (
    <div>
        <input type="color" name="favorite_color" onChange={handleSliderChange2}>
    </div>
    );
}
export default LightDetailCondo;
hi3rlvi2

hi3rlvi21#

你的hexToRGB函数需要一个十六进制值的参数。你调用它时没有参数,所以它总是未定义的。你也使用了与状态变量相同的参数名称,所以在方法内部你实际上是在隐藏外部的参数。
你可以
1.删除该参数,以便它使用外部hex_value
1.将外部hex_value作为参数传递给方法
就像

const hexToRGB = () => {
  const numericValue = parseInt(hex_value, 16);
  const r = numericValue >> 16 & 0xFF;
  const g = numericValue >> 8 & 0xFF;
  const b = numericValue & 0xFF;
  return `[${r}, ${g}, ${b}]`
}
a8jjtwal

a8jjtwal2#

也许你可以用这个:

<script>
  let d = "#abd450".replace("#" ,"")
   let c2hex = `rgba(${Array.from(d).map((a , _) =>  _  % 2 == 0 ?  parseInt(d[_] + d[_ + 1] , 16) + "," : null ).join("")} 1)`
  console.log(c2hex)

   //2nd method =>
   const hex2rgb = hex => [...hex.match(/\w\w/g)].map(x => parseInt(x, 16));
   hex2rgb("#40abdc")

</script>

相关问题