【发布时间】:2021-11-30 05:08:30
【问题描述】:
我是 React 领域的新手,所以我不确定自己做错了什么。我在父组件中有一个点击处理程序,需要传递子组件的按钮元素。
父组件是'LogStatus'
import React, { Component } from 'react';
import DisplayMessage from './DisplayMessage'
class LogStatus extends React.Component {
constructor(props) {
super(props);
this.state = {
isLogin: true,
}
this.btnChangeStatusClickHandler = this.btnChangeStatusClickHandler.bind(this);
}
btnChangeStatusClickHandler() {
this.setState(previousState =>
previousState.isLogin = !this.state.isLogin,
)
}
render() {
let statusMessage = '';
if (this.state.isLogin === true) {
statusMessage = 'Login';
}
else {
statusMessage = 'Logoff'
}
return (
<div>
<DisplayMessage statusMessage={statusMessage} loginStatusHandler={this.btnChangeStatusClickHandler} />
</div>
);
}
}
export default LogStatus;
子组件是'DisplayMessage'
import React, { Component } from 'react';
class DisplayMessage extends Component {
constructor(props) {
super(props);
this.state = {
statusMessage: props.statusMessage,
btnStatusClickHandler: props.loginStatusHandler,
}
}
render() {
let displayBtnMessage = '';
if (this.state.statusMessage === 'Login') {
displayBtnMessage = "Logoff";
}
else {
displayBtnMessage = 'Login';
}
return (
<div>
<h3>Login Status: {this.state.statusMessage}</h3>
<button onClick={this.state.btnStatusClickHandler}>{displayBtnMessage}</button>
</div>
);
}
}
export default DisplayMessage;
工作代码供参考:
父组件是'LogStatus'
import React, { Component } from 'react';
import DisplayMessage from './DisplayMessage'
class LogStatus extends React.Component {
constructor(props) {
super(props);
this.state = {
isLogin: true,
displayStatus: '',
}
this.btnChangeStatusClickHandler = this.btnChangeStatusClickHandler.bind(this);
}
btnChangeStatusClickHandler() {
this.setState(previousState => {
if (this.state.isLogin === true) {
return {
displayStatus: 'Login',
isLogin: !previousState.isLogin,
}
}
else {
return {
displayStatus: 'Logoff',
isLogin: !previousState.isLogin,
}
}
})
}
render() {
return (
<div>
<DisplayMessage statusMessage={this.state.displayStatus} loginStatusHandler={this.btnChangeStatusClickHandler} />
</div>
);
}
}
export default LogStatus;
子组件是'DisplayMessage'
import React, { Component } from 'react';
class DisplayMessage extends Component {
render() {
const { statusMessage, loginStatusHandler } = this.props;
let displayBtnMessage = '';
if (statusMessage === 'Login') {
displayBtnMessage = "Logoff";
}
else {
displayBtnMessage = 'Login';
}
return (
<div>
<h3>Login Status: {statusMessage}</h3>
<button onClick={loginStatusHandler}>{displayBtnMessage}</button>
</div>
);
}
}
export default DisplayMessage;
【问题讨论】: