如何使用 Lit HTML 将 React 钩子 useState() 的回调函数传递给 Web 组件的属性

how do you pass a React hook useState() 's callback function to a web component's attribute using Lit HTML

我正在构建一个自定义 Web 组件以与 React 一起使用,我正在使用 React useState 钩子和 我需要将它传递到我的自定义 Web 组件中。我知道 Web 组件属性只接受字符串,如果我要将我的函数字符串化,它将失去它的范围。所以这就是我的问题。我正在使用 Lit HTML 和 React.

    function MyReactcomp() {
       const [state, setState] = useState("");
       return (
            <div className="Wrapper">
               <customweb-component updateState={setState} />
            </div>
        );
    }

尝试在您的组件上使用 onChange={},然后创建一个函数来处理更改。


const MyReactComp = (props) => {
  const [state, setState] = useState("");

  const stateUpdateHandler = (event) => {
    if ( event.target.value.trim().length > 0 ) {
      setState( event.target.value );
    }
  }

  return (
    <div className="Wrapper">
       <CustomWebComponent onChange={stateUpdateHandler} />
    </div>
  )
}

不能直接在 onChange={} 上使用 setState 的原因之一是范围不同,因此 this 在函数中使用时可能并不总是在预期范围。

然后在您的 CustomWebComponet 中,您将通过以下方式传回该值:

const CustomWebComponent = (props) => {

  // You can tie this is an event, or some other
  // normal function where you are processing the return value
  const onTrigger = (event) => {
    event.preventDefault();
    props.onChange(event.target.myvar.value);
  }

  return ( ... )
}

如果您注意到,属性名称 onChange={} 是任意的,您可以随意命名。只需确保在调用该函数时使用相同的名称,例如函数 onTrigger.

中的 props.onChange()