[英]How to pass data between React components without rendering the child component
[英]Pass data and functions to child components , not rendering
將數據從父組件傳遞到子AccountsDropDown時遇到問題。 按照下面的代碼,我可以將depositAcct參數傳遞給子級,但不能傳遞所選的值和onValueChnage方法。
因此,按照當前代碼,這是面臨的兩個問題
這是我的父組件
import React, { Component } from "react";
const transferType = ["Transfer", "Pay Loan"];
export default class a2aTransfer extends Component {
constructor(props) {
super(props);
this.state = {
mode: "start",
selectedTransferType: transferType[0],
fromAcct: "",
toAcct: "",
amt: "",
memo: ""
};
}
componentDidMount() {
this.setState({ fromAcct: this.context.depositAcct[0].desc });
this.setState({ toAcct: this.context.loanAcct[0].desc });
}
render() {
TransferForm = () => {
return (
<Container>
<Content>
<Form>
<View style={styles.item}>
<Text note>From Account</Text>
<AccountsDropDown
selectedValue={this.state.fromAcct}
depositAcct={this.context.depositAcct}
navigation={this.props.navigation}
onValueChange={itemValue => this.setState({ fromAcct: itemValue })}
/>
</View>
</Form>
</Content>
</Container>
);
};
if (this.state.mode == "start") {
return <TransferForm />;
}
return <TransferConfirm />;
}
}
a2aTransfer.contextType = MyContext;
這是我的孩子
import React, { Component } from "react";
import { Picker, Icon } from "native-base";
import { Dimensions, Platform } from "react-native";
export default class accountsDropDown extends Component {
constructor(props) {
super(props);
}
render() {
return (
<Picker
selectedValue={this.props.selectedValue}
mode="dropdown"
iosHeader="Choose To Account"
style={{ width: Platform.OS === "ios" ? undefined : Dimensions.get("window").width }}
iosIcon={<Icon name="arrow-down" />}
onValueChange={() => this.props.onValueChange}
>
{typeof this.props.depositAcct != "undefined" &&
this.props.depositAcct.map((acct, idx) => {
return <Picker.Item key={idx} label={acct.desc} value={acct.masked} />;
})}
</Picker>
);
}
}
onValueChange
是一個函數,因此您需要在子組件中使用以下值調用它:
<Picker
selectedValue={this.props.selectedValue}
mode="dropdown"
iosHeader="Choose To Account"
style={{ width: Platform.OS === "ios" ? undefined : Dimensions.get("window").width }}
iosIcon={<Icon name="arrow-down" />}
onValueChange={(value) => this.props.onValueChange(value)}
如果您不需要轉換value
則直接傳遞函數:
onValueChange={this.props.onValueChange}
您已經編寫了確定的代碼,只需檢查是否從上下文中獲取數據即可。
在渲染方法中控制台您的selectedValue,並檢查是否從上下文獲取數據
render() {
console.log(this.props.selectedValue);
return (
<Picker
selectedValue={this.props.selectedValue}
mode="dropdown"
iosHeader="Choose To Account"
style={{ width: Platform.OS === "ios" ? undefined : Dimensions.get("window").width }}
iosIcon={<Icon name="arrow-down" />}
onValueChange={() => this.props.onValueChange}
>
{typeof this.props.depositAcct != "undefined" &&
this.props.depositAcct.map((acct, idx) => {
return <Picker.Item key={idx} label={acct.desc} value={acct.masked} />;
})}
</Picker>
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.