react-native - 如何在 ReactNative 中访问另一个控件中的一个控件属性
问题描述
我想在 react native 中从 HelloWorldApp 组件类访问 this.state.sampleString 到 CustomWebView 组件类,但在警报中 this.props.sampleString 显示“未定义”。
这是我的代码:
class CustomWebView extends Component{
constructor(props){
super(props);
this.state = { text: 'http://www.google.com' };
}
render() {
alert(this.props.sampleString);
return (
<WebView
source={{uri:this.state.text}}
style={{marginTop: 50}}
/>
);
}
}
export default class HelloWorldApp extends Component {
constructor(props) {
super(props);
this.state = { sampleString: 'http://www.google.com' };
this.getValue = this.getValue.bind(this);
}
getValue(){
//console.log(this.state.sampleString);
return this.state.sampleString
}
handleClick = () => {
alert(this.state.sampleString);
}
render(){
const {isFocused} = this.state;
const{onFocus,onBlur} = this.props;
return (
<View style={{
flexDirection: 'column',
height: '100%',
paddingTop: 36
}}>
<View style={{
flexDirection: 'row',
height : '5%',
width : '100%',
justifyContent: 'flex-start',
paddingBottom:3,
paddingTop:1,
marginTop : 20
}}>
<TextInput
selectionColor = {BLUE}
ref = "urltext"
underlineColorAndroid={isFocused?BLUE:LIGHT_GRAY}
onFocus = {this.handleFocus}
onBlur ={this.handleBlur}
style={styles.textInput}
onChangeText={(sampleString) => this.setState({sampleString})}
value={this.state.sampleString}
/>
<Button title="Submit"
onPress = {this.handleClick.bind(this)}
color="#9933ff"
accessibilityLabel="TestButton"/>
</View>
<CustomWebView/>
</View>
);
}
} })
我需要在 HelloWorldApp 类中 Button 的 onPress 事件上更改类 CustomWebView 中的 url。这就是我想在 CustomWebView 类中访问 this.props.sampleString 的原因。
解决方案
首先,您使用了错误的方法来更新onChangeText
as 的状态,
onChangeText={(sampleString) => this.setState({sampleString})}
当你使用上述方法时,你会得到一个错误,比如,
sampleState 未定义
因为您必须使用方法中的更新值定义要更新的状态setState
。您必须将状态更新为,
onChangeText={(inputText) => this.setState({sampleString: inputText})}
然后你可以把这个 sampleStringCustomWebView
作为 prop 传入,
<CustomWebView uri = {this.state.sampleString} />
最后,您可以在 CustomWebView 中访问此道具,
<WebView
source={{ uri: this.props.uri }}
style={{ marginTop: 50 }}
/>
一切都完成了:)
注意: -因为您正在更新状态onChangeText
,并同时将此状态作为道具传递给 CustomWebView。CustomWebView 无需单击按钮即可访问此状态。
推荐阅读
- pandas - 如果条件在字符串上使用 isin,则 Pandas 数据框
- jenkins - 矩阵管道——等待下一个可用的执行器
- linux - 在 bash 脚本中执行 source .bashrc
- batch-file - 尝试 ping IP 并将结果保存到文本但在尝试运行 .bat 文件时在 cmd 提示符中收到语法错误
- android - 如何从 firebase 云功能中的代码设置 android 频道通知?
- java - 获取无障碍服务的 WhatsApp 视图 ID
- android - android RTP/RTCP 基于 java 的实现
- ios - UUID 意外更改
- python - 如何在 jit 编译的 jax 代码中执行非整数索引运算?
- php - iPhone OS 图像/照片大小调整工具更改 EXIF 方向数据