我有下面的简单代码,它有一个小的单选按钮选择,它在表单的底部显示了两个图像。我希望此代码在加载时不显示任何图像,并根据在单选按钮选择中所做的选择,仅显示表示选择的单个图像。基本上是一个虚拟的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;发布于 2021-10-20 15:39:12
您只需检查状态并决定呈现哪个组件。我已经删除了表单和一些未使用的代码,因为它不需要。
如下所示:
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>
);
}
}关于加载状态,我会在父组件上这样做,不会混淆逻辑。
https://stackoverflow.com/questions/69648833
复制相似问题