【发布时间】:2018-03-29 02:43:03
【问题描述】:
我正在构建类似于 Facebook 或 instagram 的搜索页面。基本上,如果我们按下搜索按钮,它会导航到“搜索屏幕”。当它的组件被挂载时,我想设置搜索头是焦点(光标)。
我的问题是当我将 TextInput ref 设置为道具时。我收到Stateless function components cannot have refs 错误。这是正确的方法吗?为什么它不起作用?你知道除此之外还有什么更好的方法吗?
我在 FlatList 中的 renderHeader 属性中添加了 _renderHeader 私有函数。 这是_renderHeader
_renderHeader = () => {
return (
<View style={styles.layoutheader}>
<View style={styles.containerheader}>
<RkTextInput
rkType='row'
ref="sbar" /////////////////////HERE////////////
autoCapitalize='none'
autoCorrect={false}
label={<RkText rkType='awesome' style={{color:'white'}}>{FontAwesome.search}</RkText>}
placeholder='Search'
underlineWidth="1"
underlineColor="white"
style={styles.searchBarheader}
inputStyle={{color:'white'}}
labelStyle={{marginRight:0}}
value={this.state.inputText}
onChangeText={(inputText)=>{this.setState({inputText})}}
/>
<View style={styles.left}>
<RkButton
rkType='clear'
style={styles.menuheader}
onPress={() => {
this.props.navigation.goBack()
}}>
<RkText style={styles.titleText} rkType='awesome hero'>{FontAwesome.chevronLeft}</RkText>
</RkButton>
</View>
</View>
</View>
)
}
componentDidMount() {
this.refs.sbar.focus(); ////////// Here I want to focus RkTextInput when it's loaded
}
更新这是所要求的实际代码
class SearchScreen extends Component {
static navigationOptions = ({navigation}) => ({
header: null
})
state = {
active: false,
inputText: ''
}
...
_renderRow = (row) => {
...
);
}
_renderHeader = () => {
...
}
render() {
return (
<FlatList
data={null}
renderItem={this._renderRow}
renderHeader={this._renderHeader}
keyExtractor={this._keyExtractor}
ListHeaderComponent={this._renderHeader}
/>
);
}
componentDidMount() {
this.refs.sbar.focus();
}
}
【问题讨论】:
-
Refs 通常用于更改组件的状态,因此如果没有为组件创建 ref 是没有意义的。
-
@GuilhermeCronemberger
refs在使用原生TextInput控制焦点时是有意义的。 -
对不起,我不明白。那么如何引用TextInput呢?
-
能贴出整个组件类,还是简化版的?
标签: reactjs react-native react-navigation