javascript - 通过在 React 中使用 useRef 钩子(Hook)获取另一个组件的宽度来调整一个组件的大小

标签 javascript reactjs

我正在尝试使用 React 中的 useRef Hook 来设置组件的宽度,但我显然不是在摸索这个模式。 codesandbox 可以在这里找到:https://codesandbox.io/s/vqn5jyv9y5 .谢谢!

import React, {useRef} from "react";
import ReactDOM from "react-dom";

import "./styles.css";

function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <Foo />
    </div>
  );
}

const Foo = () => {
  const { current: btn } = useRef(null);
  return (
    <React.Fragment>
      <button ref={btn}>buuuuttttoooon</button>
      <div style={{ width: btn.style.width, backgroundColor: 'pink', height: '50px' }} />
    </React.Fragment>
  )
}


const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

最佳答案

btnnull 的形式出现,这会引起麻烦,而且 ref 会选择您在组件级别定义的样式。如果我理解正确,那么您要在第一个 HTML 元素的基础上修改另一个 HTML 元素的样式。

请找到我使用state修改的代码-

const Foo = () => {
  const [count, setCount] = React.useState('100px')
  const refElem = React.useRef(0)
  return (
    <>
      <button 
        ref={refElem => {
            if(refElem) {
              setCount(refElem.style.width)
            }
          }
        }
        style={{
          width: '700px'
        }}>This is a button 1</button>
      <hr />
      <button style={{width: count}}>This is a button 2 = {count}</button>
      <hr />
    </>
  )
}

工作示例 - https://codepen.io/swapnesh/pen/ywPRWG

关于javascript - 通过在 React 中使用 useRef 钩子(Hook)获取另一个组件的宽度来调整一个组件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55133853/

相关文章:

javascript - 滚动时隐藏导航栏,但这样做不是动画而是自然 'scrolled away'

javascript - Nodejs 后面写的连接套接字如何保存?

javascript - 我正在尝试使用 "Rick and Morty"REST API 在屏幕上呈现名称,但实际上没有任何内容呈现,并且我的状态没有更新

reactjs - 如何在功能组件中访问 props.match.params

javascript - ReactJS - 无法读取未定义的属性 'preventDefault'

javascript - Redux 不更新组件的 props

node.js - npm并发错误?同时运行前端和后端时?

javascript - 如何在 React 中将 API 请求限制为每天一次?

javascript - 如何将毫秒转换为可读的日期分钟 :Seconds Format?

javascript - highchart 将 x 轴标签放置在日期时间轴上的刻度之间