反应组件内部函数的条件渲染不起作用
React Conditional Rendering of Component Inside Function Not Working
我正在使用 Codesandbox 来学习 React。我正在尝试有条件地在函数内部(在基于 class 的组件内部)呈现功能性 React 组件,该组件在单击按钮时触发。
这是 Codesandbox 的 link:https://codesandbox.io/embed/laughing-butterfly-mtjrq?fontsize=14&hidenavigation=1&theme=dark
我遇到的问题是,如果不在 App.js 中导入和渲染 Error 和 Meals,我永远无法从 Booking 组件中渲染任何一个组件。在此处的函数中:
if (!this.state.name) {
return (
<div>
<Error />
</div>
);
}
else {
return <Meals name={this.state.name} date={this.state.date} />;
}
}
我应该渲染错误,如果没有输入名称但没有任何反应,我应该会在点击时显示在屏幕上,我很困惑。
有什么明显的东西会阻止我看到错误组件在点击时加载吗?
提前致谢!
render() {
const name = this.state.name;
return (
<div>
{name ? (
<Meals name={name} date={name} />
) : (
<Error />
)}
</div>
);
}
nb:仅在 class 组件中使用渲染方法。
中提到了多种类型的条件渲染
屏幕上显示的一切都来自render
方法。你不能 return JSX
从任何类似的功能。你可以这样做:
class Bookings extends React.Component {
constructor(props) {
super(props);
this.state = {
name: "",
date: "",
display: false
};
}
guestInfoHandler = event => {
console.log(this.state, "what is the state");
this.setState({ name: event.target.value });
};
dateInfoHandler = event => {
this.setState({ date: event.target.value });
};
showMeals = () => {
this.setState({ display: true });
};
render() {
return (
<>
<div style={{ display: "inline-block" }}>
<form
className="theForm"
style={{
height: "50px",
width: "100px",
borderColor: "black",
borderWidth: "1px"
}}
>
<label className="theLabel">
Name:
<input
className="theInput"
type="text"
placeholder="guest name here"
onChange={this.guestInfoHandler}
value={this.state.value}
/>
</label>
</form>
<form>
<label>
Date:
<input
type="text"
placeholder="date here"
onChange={this.dateInfoHandler}
value={this.state.value}
/>
</label>
</form>
<button onClick={() => this.showMeals()}>Click</button>
</div>
{ display && name ? (
<Meals name={name} date={name} />
) : (
<Error />
)}
</>
);
}
}
export default Bookings;
希望这对你有用。
我正在使用 Codesandbox 来学习 React。我正在尝试有条件地在函数内部(在基于 class 的组件内部)呈现功能性 React 组件,该组件在单击按钮时触发。
这是 Codesandbox 的 link:https://codesandbox.io/embed/laughing-butterfly-mtjrq?fontsize=14&hidenavigation=1&theme=dark
我遇到的问题是,如果不在 App.js 中导入和渲染 Error 和 Meals,我永远无法从 Booking 组件中渲染任何一个组件。在此处的函数中:
if (!this.state.name) {
return (
<div>
<Error />
</div>
);
}
else {
return <Meals name={this.state.name} date={this.state.date} />;
}
}
我应该渲染错误,如果没有输入名称但没有任何反应,我应该会在点击时显示在屏幕上,我很困惑。
有什么明显的东西会阻止我看到错误组件在点击时加载吗?
提前致谢!
render() {
const name = this.state.name;
return (
<div>
{name ? (
<Meals name={name} date={name} />
) : (
<Error />
)}
</div>
);
}
nb:仅在 class 组件中使用渲染方法。
中提到了多种类型的条件渲染屏幕上显示的一切都来自render
方法。你不能 return JSX
从任何类似的功能。你可以这样做:
class Bookings extends React.Component {
constructor(props) {
super(props);
this.state = {
name: "",
date: "",
display: false
};
}
guestInfoHandler = event => {
console.log(this.state, "what is the state");
this.setState({ name: event.target.value });
};
dateInfoHandler = event => {
this.setState({ date: event.target.value });
};
showMeals = () => {
this.setState({ display: true });
};
render() {
return (
<>
<div style={{ display: "inline-block" }}>
<form
className="theForm"
style={{
height: "50px",
width: "100px",
borderColor: "black",
borderWidth: "1px"
}}
>
<label className="theLabel">
Name:
<input
className="theInput"
type="text"
placeholder="guest name here"
onChange={this.guestInfoHandler}
value={this.state.value}
/>
</label>
</form>
<form>
<label>
Date:
<input
type="text"
placeholder="date here"
onChange={this.dateInfoHandler}
value={this.state.value}
/>
</label>
</form>
<button onClick={() => this.showMeals()}>Click</button>
</div>
{ display && name ? (
<Meals name={name} date={name} />
) : (
<Error />
)}
</>
);
}
}
export default Bookings;
希望这对你有用。