答案 0 :(得分:1)
您可以将默认值prop置于组件状态并继续使用。
示例
class App extends React.Component {
state = {
options: ["foo", "bar", "baz"],
selectedOption: this.props.defaultOption
};
onChange = e => {
this.setState({ selectedOption: e.target.value });
};
render() {
const { options, selectedOption } = this.state;
return (
<select value={selectedOption} onChange={this.onChange}>
{options.map((option, index) => (
<option key={index} value={option}>
{option}
</option>
))}
</select>
);
}
}
ReactDOM.render(<App defaultOption="bar" />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
答案 1 :(得分:1)
看看我编写的此CodePen:https://codepen.io/Gesma94/pen/QYYWKG
因为您要从道具中获取值,所以这意味着父组件将值保持在状态中(可能),因此,当您选择一个选项时,您需要更新父组件的状态,并依次为此,您需要使用Parent的选项将handlerFunction传递给Component。
class List extends React.Component {
options = ["one", "two", "threee"];
render() {
const {handleChange, value} = this.props;
return (
<select value={value} onChange={handleChange}>
{
this.options.map((option, index) =>
<option key={index} value={option}>
{option}
</option>
)}
</select>
);
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {value: "one"};
}
handleChange = (e) => {
this.setState({value: e.target.value})
}
render() {
return <List handleChange={this.handleChange} value={this.state.value} />
}
}
ReactDOM.render(<App />, document.getElementById("root"));
编辑好吧,..问题之一就是我昨天说的:您将默认值传递给UserMaintenanceModal
组件,该默认值保存在{{ 1}}组件。但是,然后,在App
组件中,您更新自身的状态,而不是UserMaintenanceModal
组件的状态,因此您有点不一致。
无论如何,这不是您最大的问题:据我所知,存在一些“困惑”(或者可能是我不太了解您要实现的目标:))。因此,现在我假设,正如我在评论中所说,您只想显示属于所选部门的所有用户!
我看到,在App
组件的handleChange
内部,您保存了该州的App
属性中有关当前点击的用户的信息(我不知道这是否是强制性的,或者是尝试达到我的预期)。万一您想保存该信息,这是多余的,因为您已经在data
属性中拥有了所有这些信息:您可以只保存users
或userId
中的位置点击的用户数组。
然后,我也不明白为什么users
最初设置为showModal
并在单击用户时变为false
:这样看来所有用户都应该可见在开始时,一旦您单击其中的一个,就可以通过单击的用户所属的部门来过滤用户。但是,如果是这种情况,我不知道为什么选择应该在之后变得可见..:S
最后,在true
组件的render()
方法中,您应该以某种方式说“嘿,仅呈现所选部门所属的用户”,您没有尝试过(就我而言)可以看到)。在下面的示例中,我使用的是App
本机函数,但是您只保留了filter
函数,并且仅当其map
等于当前所选用户时才返回用户。
无论如何,我还认为选择应该从一开始就可见,并且我已经分叉了您的代码笔,看看这个,让我知道这是否是您想要的:https://codepen.io/Gesma94/pen/aXXjvE
请注意,在此示例中,部门值处于user_department
状态,这根本不是一件好事:您应该从保存在状态中的UserMaintenanceModal
数组中检索部门users
组件中的组件,然后将它们传递给App
组件。.我的意思是,您应该执行类似“确定,让我们查看所有用户并查看我拥有的所有部门。现在,有了它,让我们将它们传递给UserMaintenanceModal
。
答案 2 :(得分:0)
就我而言,我想根据selected
字段来切换或渲染不同的组件以进行填充。每当我切换它时,我都无法重置渲染组件的选定字段。结果,我不能显示正确的占位符,而是先显示option
。这是错误的,可能会使用户感到困惑。
我在
defaultValue
标记中添加了select
。 我希望用户第一次看到的占位符
我在
value
标记中添加了select
。 这有助于我跟踪用户何时改变主意或清理数据。
<select
name={inputName}
id={inputId}
className="input-controller-required"
required
onChange={onHandleInputChange}
defaultValue={defaultValue}
value={defaultValue} // I forgot to add value
>
<option disabled value="">{placeholder}</option>
{
options.map((item, index) => (
<option value={item.value} key={index}>{item.text}</option>
))
}
</select>
谢谢@Jolly的回答和其他贡献者的支持。