将图像添加到 ToggleButtonGroup
Adding an image into a ToggleButtonGroup
我想实现这个设计:
我目前有点卡在图片-答案部分。
我有想法,但是有个问题
import { useState } from 'react';
import { ToggleButtonGroup, ToggleButton } from 'react-bootstrap';
import './css/GameAnswers.css';
import GameImage from './GameImage';
type GameAnswersProps = {
arrayAnswers: Array<string>,
arrayAnswersImages?: Array<string>,
correctAnswer: string,
setFinishedGameHandler: Function
}
function GameAnswers(props: GameAnswersProps) {
const [selectedAnswer, setSelectedAnswer] = useState("");
const handleAnswerChange = function (e: React.ChangeEvent<HTMLInputElement>) {
setSelectedAnswer(e.target.value);
}
const determineButtonVariant = function (answer: string) {
if (answer !== selectedAnswer) {
return "primary";
} else if (answer === props.correctAnswer) {
props.setFinishedGameHandler(true);
return "success";
} else {
props.setFinishedGameHandler(false);
return "danger";
}
}
return (
<div className="game-answers">
{
props.arrayAnswersImages === undefined ?
<GameImage className="game-details-image" images={[{ imgSrc: "/Untitled.png", imgAlt: 'test' }]} /> :
""
}
<ToggleButtonGroup type="radio" name="answers">
{props.arrayAnswers.map(function (answer, index) {
return <div>
{props.arrayAnswersImages !== undefined ?
<GameImage className="game-togglebutton" images={[{ imgSrc: props.arrayAnswersImages[index], imgAlt: 'test' }]} /> : ""
}
<ToggleButton
id={answer}
value={answer}
onChange={handleAnswerChange}
variant={determineButtonVariant(answer)}
>{answer}</ToggleButton>
</div>
})}
</ToggleButtonGroup>
</div>
);
}
export default GameAnswers;
因为地图函数 return 是 div,我的 ToggleButton 无法正常工作。如果我点击按钮,什么也不会发生。
如果我删除 div 包装,我会得到一个错误,因为我 return 两个组件。
如果我也删除 GameImage 组件,一切都会正常,但文本上方将没有图像。
那么,当 ToggleButton 上方的图像仍然存在时,如何使我的代码正常工作?
在 React 中您可以使用 Fragments,这是在
时排除该额外节点的常用方法,例如返回列表。
将包装 <div></div>
标签更改为 ->
<React.Fragment></React.Fragment>
.
一个较短的语法是<></>
。
我想实现这个设计:
我目前有点卡在图片-答案部分。
我有想法,但是有个问题
import { useState } from 'react';
import { ToggleButtonGroup, ToggleButton } from 'react-bootstrap';
import './css/GameAnswers.css';
import GameImage from './GameImage';
type GameAnswersProps = {
arrayAnswers: Array<string>,
arrayAnswersImages?: Array<string>,
correctAnswer: string,
setFinishedGameHandler: Function
}
function GameAnswers(props: GameAnswersProps) {
const [selectedAnswer, setSelectedAnswer] = useState("");
const handleAnswerChange = function (e: React.ChangeEvent<HTMLInputElement>) {
setSelectedAnswer(e.target.value);
}
const determineButtonVariant = function (answer: string) {
if (answer !== selectedAnswer) {
return "primary";
} else if (answer === props.correctAnswer) {
props.setFinishedGameHandler(true);
return "success";
} else {
props.setFinishedGameHandler(false);
return "danger";
}
}
return (
<div className="game-answers">
{
props.arrayAnswersImages === undefined ?
<GameImage className="game-details-image" images={[{ imgSrc: "/Untitled.png", imgAlt: 'test' }]} /> :
""
}
<ToggleButtonGroup type="radio" name="answers">
{props.arrayAnswers.map(function (answer, index) {
return <div>
{props.arrayAnswersImages !== undefined ?
<GameImage className="game-togglebutton" images={[{ imgSrc: props.arrayAnswersImages[index], imgAlt: 'test' }]} /> : ""
}
<ToggleButton
id={answer}
value={answer}
onChange={handleAnswerChange}
variant={determineButtonVariant(answer)}
>{answer}</ToggleButton>
</div>
})}
</ToggleButtonGroup>
</div>
);
}
export default GameAnswers;
因为地图函数 return 是 div,我的 ToggleButton 无法正常工作。如果我点击按钮,什么也不会发生。
如果我删除 div 包装,我会得到一个错误,因为我 return 两个组件。
如果我也删除 GameImage 组件,一切都会正常,但文本上方将没有图像。
那么,当 ToggleButton 上方的图像仍然存在时,如何使我的代码正常工作?
在 React 中您可以使用 Fragments,这是在
时排除该额外节点的常用方法,例如返回列表。
将包装 <div></div>
标签更改为 ->
<React.Fragment></React.Fragment>
.
一个较短的语法是<></>
。