【发布时间】:2021-01-26 22:47:18
【问题描述】:
我有一个使用它的屏幕:
const [searchText, setSearchText] = useState('');
<Item rounded style={styles.inputItem}>
<Icon
name="search"
size={moderateScale(18)}
color="#bdbdbd"
style={styles.icon}
/>
<Input
autoFocus={true}
autoCapitalize="none"
style={styles.inputField}
placeholder="Friend Search"
keyboardType="default"
onChangeText={(text: string) => {
setSearchText(text);
}}
/>
</Item>
我不想在当前屏幕上使用 Input 元素,而是想把它变成一个可重用的组件。像这样的:
type SearchInputProps = {
handleChange?: any;
};
export const SearchInput: React.FunctionComponent<SearchInputProps> = (handleChange) => {
return (
<Item rounded style={styles.inputItem}>
<Icon name='search' size={moderateScale(18)} color="#bdbdbd" style={styles.icon}/>
<Input
autoFocus={true}
autoCapitalize="none"
style={styles.inputField}
placeholder="Friend Search"
onChangeText={()=>handleChange}
/>
</Item>
);
};
但是,我无法弄清楚如何使onChangeText 工作,以便可以在那里设置主屏幕中的const [searchText, setSearchText] = useState(''); 值。有没有可能?
我试图在这里创建一个小吃博览会,但我无法安装原生库https://snack.expo.io/@nhammad/curious-bubblegum
编辑:
设法解决了类型错误,但在调用组件时仍然不知道如何传递setSearchText。
type SearchInputProps = React.PropsWithRef<{
handleChange?: any;
}>;
export const FieldInput = React.forwardRef<Input, SearchInputProps>(
({ handleChange }) => {
return (
<Item rounded style={styles.inputItem}>
<Icon
name="search"
size={moderateScale(18)}
color="#bdbdbd"
style={styles.icon}
/>
<Input
autoFocus={true}
autoCapitalize="none"
style={styles.inputField}
placeholder="Friend Search"
keyboardType="default"
onChangeText={handleChange}
/>
</Item>
);
},
);
【问题讨论】:
-
您希望从消费者组件控制共享
Input的哪些功能? -
我只是希望能够在调用它时传递
setSearchText(text)之类的东西。这样我就可以使用这个组件在主屏幕上设置状态。 @im_tsm
标签: javascript reactjs typescript react-native native-base