小编Mat*_*row的帖子

React - 在组件中使用forwardRef,打字稿错误 - 缺少属性“current”

我很难理解为什么打字稿编译器对我在组件中使用的forwardRef不满意。

对于下面的示例,我已将代码精简为最基本的内容,确保此打字稿错误是代码中唯一出现的错误,根据我的实际代码中的问题:

import { createRef, forwardRef, RefObject } from 'react';

const MyComponent = () => {
    const selectCountryRef = createRef<HTMLSelectElement>();

    return (
        <div>
            <SelectCountry ref={selectCountryRef} />
        </div>
    );
};

const SelectCountry = forwardRef((ref?: RefObject<HTMLSelectElement>) => {
    return (
        <FormFieldSelect ref={ref} />
    );
});

const FormFieldSelect = ({ ref }) => {
    return (
        <div>
            <select ref={ref}>
            </select>
        </div>
    );
};

Run Code Online (Sandbox Code Playgroud)

当尝试编译这个时,我收到错误:

Property 'current' is missing in type '{ ref: RefObject<HTMLSelectElement>; }' but required in type 'RefObject<HTMLSelectElement>'.

在 VSCode 中,<SelectCountry …

typescript reactjs react-ref react-forwardref

5
推荐指数
1
解决办法
1万
查看次数

将枚举(作为字符串)从 CAPS_CASE 转换为 camelCase

我找到了将 ENUM 转换为驼峰大小写的解决方案,但它并不优雅。

var underscoreToCamelCase = function(str) {
    str = (str === undefined || str === null) ? '' : str;
    str = str.replace(/_/g, " ").toLowerCase();
    return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
        if (+match === 0) return "";
        return index == 0 ? match.toLowerCase() : match.toUpperCase();
    });
}
Run Code Online (Sandbox Code Playgroud)

因此,如果 str 是 MY_ENUM_STRING,它将返回 myEnumString。

必须有一种方法可以通过单个正则表达式匹配来实现这一目标吗?

javascript regex string

3
推荐指数
1
解决办法
1582
查看次数