gpt4 book ai didi

javascript - 如何通过react中的包装类公开内部组件的函数?

转载 作者:行者123 更新时间:2023-12-03 05:14:44 24 4
gpt4 key购买 nike

我正在使用 @soutem/ui 库,它有自己的 TextInput 实现以实现 native react 。

https://github.com/shoutem/ui/blob/develop/components/TextInput.js

我正在尝试将焦点设置在键盘上的下一个输入上,按下下一个按钮,如下所示

React Native: How to select the next TextInput after pressing the "next" keyboard button?

但是,Shoutem/ui 的实现并未公开我可以从引用中使用的 TextInput 的 focus() 方法。

如何将 TextInput 的 focus 方法公开为外部类中的属性?

import React, { Component } from 'react';
import { TextInput as RNTextInput } from 'react-native';

import { connectStyle } from '@shoutem/theme';
import { connectAnimation } from '@shoutem/animation';

class TextInput extends Component {
focus() {
// how do I expose the react native text input focus method from this class?
// do I get a reference to the text input component somehow?
}
render() {
const { props } = this;
const style = {
...props.style,
};
delete style.placeholderTextColor;
delete style.selectionColor;

return (
<RNTextInput
{...props}
style={style}
placeholderTextColor={props.style.placeholderTextColor}
selectionColor={props.style.selectionColor}
/>
);
}
}

TextInput.propTypes = {
...RNTextInput.propTypes,
style: React.PropTypes.object,
};

const AnimatedTextInput = connectAnimation(TextInput);
const StyledTextInput = connectStyle('shoutem.ui.TextInput')(AnimatedTextInput);

export {
StyledTextInput as TextInput,
};

最佳答案

您可以使用refs

focus() {
this.rnInput.focus();
}
render() {
const { props } = this;
const style = {
...props.style,
};
delete style.placeholderTextColor;
delete style.selectionColor;

return (
<RNTextInput
{...props}
ref={input => this.rnInput = input}
style={style}
placeholderTextColor={props.style.placeholderTextColor}
selectionColor={props.style.selectionColor}
/>
);
}

一点解释。 ref 回调在组件完成渲染后执行,然后您将获得该组件当前实例的引用,您可以将其保存在变量中以供以后使用 ref={input => this.rnInput = input}.现在您可以使用 this.rnInput 调用 focus 方法。

关于javascript - 如何通过react中的包装类公开内部组件的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41651078/

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