gpt4 book ai didi

reactjs - 如何更改 material-ui 选择值?

转载 作者:行者123 更新时间:2023-12-03 15:48:07 25 4
gpt4 key购买 nike

让我们首先考虑这个小片段:

import "./styles.css";
import List from "@material-ui/core/List";
import ListItem from "@material-ui/core/ListItem";
import ListItemIcon from "@material-ui/core/ListItemIcon";
import ListItemSecondaryAction from "@material-ui/core/ListItemSecondaryAction";
import ListItemText from "@material-ui/core/ListItemText";
import Checkbox from "@material-ui/core/Checkbox";
import Select from "@material-ui/core/Select";
import React, { Component } from "react";

class WidgetList extends Component {
constructor(props) {
super(props);
this.state = {};
}

onChangeTag = (event, item) => {
item.tag = event.target.value;
console.log("changing tag", event.target, item.name);
};

render() {
const { allItems } = this.props;
const { selectedItems } = this.props;

return (
<List>
{allItems.map((item) => {
return (
<ListItem
key={item.name}
role={undefined}
dense
button
disableRipple
>
<ListItemIcon>
<Checkbox
edge="start"
checked={selectedItems.has(item)}
tabIndex={-1}
disableRipple
/>
</ListItemIcon>
<ListItemText primary={`${item.name}`} />
<ListItemSecondaryAction>
<Select
native
value={item.tag}
onChange={(e) => this.onChangeTag(e, item)}
>
<option value={0}>foo</option>
<option value={1}>bar</option>
<option value={2}>baz</option>
</Select>
</ListItemSecondaryAction>
</ListItem>
);
})}
</List>
);
}
}

let allItems = [
{ name: "1", tag: 0 },
{ name: "2", tag: 1 },
{ name: "3", tag: 2 }
];
let selectedItems = new Set([allItems[0], allItems[1]]);

export default function App() {
return (
<div className="App">
<WidgetList allItems={allItems} selectedItems={selectedItems} />
</div>
);
}
我想了解在单击不同的时更改选择小部件的值的方法是什么
一。现在无论您选择哪一个小部件都不会改变。
要了解我的意思,您可以在此 sandbox 上玩它, 无论您是否选择 foo , bar , baz选择小部件上的值小部件本身不会更新。

最佳答案

您需要更改存储所选项目状态的方法,以便它可以有效地处理。
主要错误在这一行:

item.tag = event.target.value;
您不能这样做,因为该项目是不可变的。
我已经更新了您沙箱中的代码以使选择正常工作。
import "./styles.css";
import List from "@material-ui/core/List";
import ListItem from "@material-ui/core/ListItem";
import ListItemIcon from "@material-ui/core/ListItemIcon";
import ListItemSecondaryAction from "@material-ui/core/ListItemSecondaryAction";
import ListItemText from "@material-ui/core/ListItemText";
import Checkbox from "@material-ui/core/Checkbox";
import Select from "@material-ui/core/Select";
import React, { Component } from "react";

class WidgetList extends Component {
constructor(props) {
super(props);
this.state = {
allItems: [],
selectedItems: {}
};
}

onChangeTag = (event, item) => {
this.setState({
selectedItems: {
...this.state.selectedItems,
[selectedItems[item.tag.toString()]]: event.target.value
}
});
};

render() {
const { allItems } = this.props;
const { selectedItems } = this.props;

return (
<List>
{allItems.map((item) => {
return (
<ListItem
key={item.name}
role={undefined}
dense
button
disableRipple
>
<ListItemIcon>
<Checkbox
edge="start"
checked={selectedItems.has(item)}
tabIndex={-1}
disableRipple
/>
</ListItemIcon>
<ListItemText primary={`${item.name}`} />
<ListItemSecondaryAction>
<Select
native
value={selectedItems[item.tag.toString()]}
onChange={(e) => this.onChangeTag(e, item)}
>
<option value={0}>foo</option>
<option value={1}>bar</option>
<option value={2}>baz</option>
</Select>
</ListItemSecondaryAction>
</ListItem>
);
})}
</List>
);
}
}

let allItems = [
{ name: "1", tag: 0 },
{ name: "2", tag: 1 },
{ name: "3", tag: 2 }
];
let selectedItems = new Set([allItems[0], allItems[1]]);

export default function App() {
return (
<div className="App">
<WidgetList allItems={allItems} selectedItems={selectedItems} />
</div>
);
}

关于reactjs - 如何更改 material-ui 选择值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63832577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com