[英]Function not being passed as prop to child component in React
我想將一個方法從父組件傳遞給子組件。 但是,該方法從未出現在子組件的道具中。 我不明白這有什么問題,這是在 React 中要做的絕對基本的事情,它只是行不通。 當然,它在應用程序代碼庫中的大約一百個其他地方工作正常。 有問題的方法是getVerificationStatus
。 它在 child 中被調用,作為對調用verifyStripeProviderAccount
返回的承諾的verifyStripeProviderAccount
。 子組件還有 5 個由 HOC 傳入的其他道具,它們都可以工作,只是由於某種原因沒有注入這個父道具。
該函數未定義,來自 redux、stripe 等的所有其他道具都存在,我得到的錯誤是:“TypeError:this.getVerificationStatus 不是http://localhost:3000/static/js/main 上的函數。 chunk.js:8837:16 "
代碼如下,但為簡潔起見,我刪除了一些不相關的部分。 家長:
import {getUserVerificationStatus} from "../services/UserService";
class VerifyAccount extends Component {
state = {
verificationStatus: VerificationStatus.UNVERIFIED
};
componentDidMount() {
this.getVerificationStatus();
};
getVerificationStatus = () => {
if (this.props.user.paymentProcessorId) {
getUserVerificationStatus()
.then(response => this.setState({
...this.state,
verificationStatus: response.status || this.state.verificationStatus
}));
}
};
render() {
return <Card>
{this.state.verificationStatus === VerificationStatus.UNVERIFIED && (
<VerificationSteps getVerificationStatus={this.getVerificationStatus}/>
)}
{this.state.verificationStatus === VerificationStatus.PENDING && (
...
)}
</Card>;
}
}
const mapStateToProps = state => {
return ...
};
const mapDispatchToProps = (dispatch) => {
return ...
};
const StripeVerifyAccount = compose(
withAuthentication,
withUserType(UserType.PROVIDER),
injectStripe,
withStyles(styles, {withTheme: true}),
injectIntl,
connect(mapStateToProps, mapDispatchToProps),
)(VerifyAccount);
export default () => {
return <>
<Elements>
<StripeVerifyAccount/>
</Elements>
</>;
}
孩子:
import {verifyStripeProviderAccount} from "../services/UserService";
class VerificationSteps extends Component {
state = {...}
handleSubmit = event => {
event.preventDefault();
verifyStripeProviderAccount(body)
.then(errors => {
if (errors) {
this.props.emitError("verification_documents_error", 5000);
} else {
this.props.getVerificationStatus();
this.setState({
...this.state,
loading: false,
success: true
});
}
})
.catch(err => {
this.setState({
...this.state,
loading: false
});
this.props.emitError("verification_error")
});
};
render() {
return <some stuff, not important>
}
}
const mapStateToProps = state => {
return ...
};
const mapDispatchToProps = (dispatch) => {
return ...
};
export default compose(
withAuthentication,
withUserType(UserType.PROVIDER),
injectStripe,
injectIntl,
connect(mapStateToProps, mapDispatchToProps),
)(VerificationSteps);
發生這種情況是因為對verifyStripeProviderAccount()
的調用不在子類的方法中,因此this
未正確初始化。 我什至希望您實際上有語法錯誤。
嘗試:
import {verifyStripeProviderAccount} from "../services/UserService";
class VerificationSteps extends Component {
state = {...}
async componentDidMount(){
verifyStripeProviderAccount(body)
.then(errors => {
if (errors) {
...
} else {
this.props.getVerificationStatus();
this.setState({
...
});
}
})
.catch(err => {
this.props.emitError("verification_error")
});
}
render() {
return <some stuff, not important>
}
}
const mapStateToProps = state => {
return ...
};
const mapDispatchToProps = (dispatch) => {
return ...
};
export default compose(
withAuthentication,
withUserType(UserType.PROVIDER),
injectStripe,
injectIntl,
connect(mapStateToProps, mapDispatchToProps),
)(VerificationSteps);
在父組件中,我有
setPerson = (person) => {
this.setState({
person: person
})
}
我像這樣將它傳遞給表單組件
<EditLinkForm
person_id={this.state.person.id}
link_id={this.state.link_id}
link_name={this.state.link_name}
link_url={this.state.link_url}
setPerson={this.setPerson}
/>
那么這就是表單(子組件)使用它的方式
axios.post(process.env.REACT_APP_API_URL + '/admin/edit_link/',
postData,
AuthenticationService.getAxiosConfig()
)
.then(response => {
this.props.setPerson(response.data.person)
}
)
完整來源在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.