reactjs - 仅当变量具有特定值时才在 Reactjs 页面中显示图像
问题描述
我有以下简单的代码,它有一个小的单选按钮选择,它在表单底部显示了两个图像。我希望这段代码在加载时不显示图像,并且根据单选按钮选择中所做的选择,只显示代表选择的单个图像。基本上是一个虚拟的if this.state.programmingmodel === 'event-driven' then <HoverImage src={longrunning} hoverSrc={longrunninghover} />
(和同样的东西eventdriven
)。
我曾尝试向部分添加onSubmitForm
语法,<HoverImage>
但并没有真正奏效。我认为我不需要创建另一个“事件”,因为我想重复使用该onSubmit
事件。
import React, { Component } from "react";
import "./index.css"
import HoverImage from "react-hover-image";
import longrunning from './longrunning.jpg';
import longrunninghover from './longrunninghover.jpg';
import eventdriven from './eventdriven.jpg';
import eventdrivenhover from './eventdrivenhover.jpg';
class App extends Component {
constructor() {
super();
this.state = {
programmingmodel: "long-running"
};
}
onValChange = (event) => {
this.setState({
[event.target.name]: event.target.value,
});
};
onCheckValChange = (e) => {
this.setState({ [e.target.name]: e.target.checked });
};
onSubmitForm = (event) => {
event.preventDefault();
console.log("state", this.state);
};
render() {
return (
<div className="App">
<h1>Containers product selection </h1>
<form onSubmit={this.onSubmitForm}>
<br/>
<b> Programming model </b>
<br/>
<label>
<input
type="radio"
name="programmingmodel"
value="long-running"
checked={this.state.programmingmodel === 'long-running'}
onChange={this.onValChange}
/>
<span>Long-running </span>
</label>
<label>
<input
type="radio"
name="programmingmodel"
value="event-driven"
checked={this.state.programmingmodel === 'event-driven'}
onChange={this.onValChange}
/>
<span>Event-driven </span>
</label>
<br/>
<button type="submit">Submit</button>
<br/>
</form>
<br/>
<HoverImage src={longrunning} hoverSrc={longrunninghover} />
<br/>
<HoverImage src={eventdriven} hoverSrc={eventdrivenhover} />
</div>
);
}
}
export default App;
解决方案
您只需要检查状态的状态并决定要渲染哪个组件。我已经删除了表单和一些未使用的代码,因为它不是必需的。
像这样:
class App extends React.Component {
constructor() {
super();
this.state = {
programmingmodel: "long-running"
};
}
onValChange = (event) => {
this.setState({
[event.target.name]: event.target.value
});
};
onCheckValChange = (e) => {
this.setState({ [e.target.name]: e.target.checked });
};
render() {
return (
<div className="App">
<h1>Containers product selection </h1>
<b> Programming model </b>
<br />
<label>
<input
type="radio"
name="programmingmodel"
value="long-running"
checked={this.state.programmingmodel === "long-running"}
onChange={this.onValChange}
/>
<span>Long-running </span>
</label>
<label>
<input
type="radio"
name="programmingmodel"
value="event-driven"
checked={this.state.programmingmodel === "event-driven"}
onChange={this.onValChange}
/>
<span>Event-driven </span>
</label>
{this.state.programmingmodel === "long-running" ? (
<HoverImage src={longrunning} hoverSrc={longrunninghover} />
) : (
<HoverImage src={eventdriven} hoverSrc={eventdrivenhover} />
)}
</div>
);
}
}
关于加载状态,我会在父组件上做,不会混用逻辑。
推荐阅读
- javascript - 导航栏应该只在我滚动时显示,但在我刷新页面时已经可见,然后在滚动时消失
- excel - 如何从excel文件中提取图像?
- amazon-web-services - 在 AWS Lambda 中切换配置文件/账户/角色
- java - Dart 中使用 RSA 公钥的纯文本加密
- android - Android Window 标志 FLAG_TRANSLUCENT_STATUS 现在已弃用,如何解决这个问题?
- aws-api-gateway - 如何通过 VPC 端点从 Route 53 访问私有 AWS API 网关?
- google-apps-script - 如果我们不时在 MS 中创建复制电子表格,我们如何同步宏?
- android - 如何在不使用 SafeArea 颤振的情况下检查设备是否有缺口?
- python - 为什么我的 django core.serializers 这么慢
- python - 如何按特定顺序放置熊猫数据框标头名称?