我有一个表单,其中必须上传菜单标题和类型。类型可以是食物菜单和饮料菜单。每种类型只有3张图片。我做了那个部分 但是当选择菜单类型的单选按钮时,如果我选择第二个或第一个单选按钮以外的其他按钮,则会选择第一个单选按钮。我该如何解决这个问题?
代码可能很大,所以这里是演示
https://codesandbox.io/s/zxxrnw2qx4
这里是简短的代码
const Preview = props => {
return (
<div>
{props.files.map((file, index) => {
if (['image/png', 'image/jpg', 'image/jpeg'].includes(file.type)) {
return (
<ClientUploadedImage
key={index}
file={file}
id={index}
menu_title={props.menu_title}
type={props.type}
foodmenuError={props.foodmenuError}
handleChange={props.handleChange}
handleTypeChange={props.handleTypeChange}
/>
);
}
return <div>No File to Show Preview</div>;
})}
</div>
);
};
const ClientUploadedImage = props => {
return (
<section id="menus-photo">
<img src={props.file.preview} width={'400px'} height={'auto'} />
<div className="content">
<form className="form">
<Radio
value="food-menu"
label={`Food Menu${props.id}`}
name={props.id}
handleChangeEvent={props.handleTypeChange}
isChecked={props.type[props.id] === 'food-menu'}
/>
<Radio
value="beverages-menu"
label={'Beverages Menu'}
name={props.id}
handleChangeEvent={props.handleTypeChange}
isChecked={props.type[props.id] === 'beverages-menu'}
/>
<InputField
name={props.id}
type="text"
label="Menu Title"
onChange={props.handleChange}
value={props.menu_title[props.id]}
/>
</form>
</div>
</section>
);
};
答案 0 :(得分:2)
您的类型数组在初始状态下为空。如果您直接从第二个图像中选择单选按钮,则使用索引1调用handleTypeChange。在该函数中,...types.slice(0, index)
变为types.slice(0,1)
,最终在空白数组上执行扩展操作,并且您的newValue将附加在第0个位置这导致选择第一个图像单选按钮。在这里你需要处理函数内第一个选择的空白数组条件,你将会很高兴。