gpt4 book ai didi

javascript - 在 React 中自动缩放输入到值的宽度

转载 作者:行者123 更新时间:2023-12-05 00:28:13 25 4
gpt4 key购买 nike

我想要一个宽度适应其内容的输入。
我正在尝试实现 this answer to a similar question ,但使用 React:

import React, { useState } from 'react';

export default () => {
const [content, setContent] = useState('');
const [width, setWidth] = useState(0);

const changeHandler = evt => {
setContent(evt.target.value);
};

return (
<wrapper>
<span id="hide">{content}</span>
<input type="text" autoFocus style={{ width }} onChange={changeHandler} />
</wrapper>
);
};
问题是我不知道如何查询跨度的宽度,以便更改输入的宽度(使用 setWidth )。
我怎样才能做到这一点?

最佳答案

经过一番折腾,我找到了解决方案!

import React, { useState, useRef, useEffect } from 'react';

export default () => {
const [content, setContent] = useState('');
const [width, setWidth] = useState(0);
const span = useRef();

useEffect(() => {
setWidth(span.current.offsetWidth);
}, [content]);

const changeHandler = evt => {
setContent(evt.target.value);
};

return (
<wrapper>
<span id="hide" ref={span}>{content}</span>
<input type="text" style={{ width }} autoFocus onChange={changeHandler} />
</wrapper>
);
};
要获得对 #hide 的引用我雇用的跨度 useRef .然后, width状态变量可以通过 useEffect 中定义的函数进行更新, 每次都会调用 content变化。
我还不得不切换 display: none#hide 的 CSS 中对于 position: absoluteopacity: 0 ,否则 targetRef.current.offsetWidth将始终为 0。
这里是 a working demo .

关于javascript - 在 React 中自动缩放输入到值的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65011555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com