react.js 如何自动聚焦 contentEditable 元素

问题描述 投票:0回答:4

如何在 React 中将焦点设置在 contentEditable 元素上? 我找到了很多关于这个主题的页面,但无法让它工作。

示例代码:

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

const About = () => {
    const inputRef = useRef(null);

    useEffect(inputRef => {
        if (inputRef) {
            inputRef.focus();
        }
    }, []);

    return (
        <div className="about">
            <h2>About</h2>

            <p className="paragraph"
                contentEditable={true}
                suppressContentEditableWarning={true}
                spellCheck={false}
                ref={inputRef}
            >
                Hello
            </p>

        </div >
    )
}

export default About;
reactjs contenteditable autofocus
4个回答
6
投票

看起来我的解决方案是这样的。

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

const About = () => {
    const inputRef = useRef(null);

    useEffect(() => {
        inputRef.current.focus();
    }, [inputRef]);

    return (
        <div className="about">
            <h2>About</h2>

            <p className="paragraph"
                contentEditable={true}
                suppressContentEditableWarning={true}
                spellCheck={false}
                ref={inputRef}
            >
                Hello
            </p>

        </div >
    )
}

export default About;

1
投票

找到了另一个可行的解决方案:

const inputRef = useCallback(node => {
    node.focus()
  }, [])

0
投票

也许你可以用这个:

  <textarea className="paragraph"
             ref={inputRef}
             value={yourValueState}
            autofocus/>

0
投票

抱歉我迟到了,但这就是我解决此问题的方法:

首先,删除 useRef 和 useEffect 钩子,因为不需要它们。然后,将 onClick 属性添加到 div。该道具应包含一个事件参数,您将使用该参数捕获当前目标并触发焦点功能。

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

const About = () => {

    return (
        <div className="about">
            <h2>About</h2>

            <p className="paragraph"
                contentEditable={true}
                suppressContentEditableWarning={true}
                spellCheck={false}
                onClick={(e)=> e.currentTarget.focus()}
              >
                Hello
            </p>

        </div >
    )
}

export default About;
© www.soinside.com 2019 - 2024. All rights reserved.