【问题标题】:How to do component inheritance in React Native like on native platform?如何像在原生平台上一样在 React Native 中进行组件继承?
【发布时间】:2020-07-06 13:09:40
【问题描述】:

我的背景是一名 iOS 开发人员,在 swift 中我可以做 MyInput: UITextField(快速组件替代 React Native Input)。 这意味着 MyInput 自动获得了 UITextField 具有的所有属性和功能。目前在 react native 我这样做:

interface Props {
    title?: string;
    text: string;
    onChangeText?: (string) => void;
    keyboardType?: KeyboardTypeOptions;
    disabled?: boolean;
    onBlur?: () => void;
}

export default function MyInput ({
    title, text, onChangeText, keyboardType, disabled = false, onBlur= (()=> null)}: Props)
{

return(
    <Input
        label={title}
        onChangeText={(text) => onChangeText(text)}
        value={text}
        keyboardType={keyboardType}
        disabled={disabled}
        onBlur={() => onBlur()}
    />);

基本上,我必须从 Input 中添加任何我想要的内容到 Props 中,然后将其重定向到 Input。有没有一种方法可以升级 Input 而无需将大部分代码加倍并在 MyInput 中默认提供所有 Input 属性?

所以像 onBlur 这样的方法必须重写。

或者如果有人至少可以告诉我用谷歌搜索什么来找到这样的解决方案?

【问题讨论】:

  • 如果我理解正确,您是说要将道具传递给 MyInput 组件,而不是再次将相同的属性重写到 Input 组件,只需将其传递给它?
  • @Tushar 如果可能的话是的,或者更准确地说,我认为 MyInput 会自动拥有 Input 拥有的道具,无论哪种方式都会有很大帮助。

标签: javascript reactjs typescript react-native react-native-component


【解决方案1】:

如果我没看错,这就是你要找的东西

export default function MyInput (props: Props) // get all the props
{

const myProps = { // change the key value pairs according to props that Input accepts
    ...props,
    label: props.text,
    value: props.text
}

return(
    <Input
        {...myProps}
    />);

如果不是,请告诉我,我会相应地更改它。

【讨论】:

  • 你的回答很有帮助,我现在唯一缺少的是,如果有一种方法可以让 MyInput 自动拥有所有输入属性,而无需在 Props 中重新定义它们。
  • 接口 Props 只是作为传入 props 的类型检查器,所以我想你无法减少这部分代码。这样做实际上很好,因为在不使用 typescript 的情况下,我们检查收到的 props 的类型,使用 PropTypes 我们必须像这样定义它们。
  • 好的,非常感谢您的帮助,它大大减少了我的代码。
猜你喜欢
  • 2016-04-03
  • 2012-10-31
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多