【发布时间】:2021-02-05 20:24:21
【问题描述】:
我的父组件中有一个函数,它获取所选项目的文本并过滤来自 api 的响应,但是一旦过滤并显示结果,我需要将它重置为文本的无值,所以如果需要,用户可以进行多次搜索。这是过滤的父组件的一部分:
class Providers extends Component {
state = {
scope: "all",
listItems: [],
};
componentDidMount () {
api.Providers.list({ scope: this.state.scope })
.then(response => {
this.setState({listItems: response.items})
})
}
dropSearch = (e) => {
let filteredList = this.state.listItems.slice().filter(i => i.fullName.includes(e) || i.active.includes(e) || i.capabilities.geographic && i.capabilities.geographic.includes(e))
this.setState({listItems: filteredList})
}
render() {
const isManager =
this.props.currentUser &&
this.props.currentUser.permissions.indexOf("manage") !== -1;
const isDirector =
this.props.currentUser &&
this.props.currentUser.permissions.indexOf("medicalDirector") !== -1;
return (
<RemoteList
listItems={this.state.listItems}
listName="providers"
>
<List onProviderStateChange={this.providerStateChanged} dropSearch={this.dropSearch}/>
</RemoteList>
);
}
这是我通过 dropSearch 道具在子组件中获取我传递给父级的值的地方:
const List = ({
items,
permissions,
currentUser,
onProviderStateChange,
dropSearch,
...props
}) => {
const providers = items || [];
const hasAudit = permissions.indexOf("medicalDirector") !== -1;
const hasEdit = permissions.indexOf("manage") !== -1;
return (
<Table className="provider-list">
<thead>
<Row className="provider-header">
<Col md={hasAudit ? "2" : "3"}>
<UncontrolledDropdown>
<DropdownToggle tag="a" caret>
Provider
</DropdownToggle>
<DropdownMenu style={{ maxHeight:"400px", overflow: "scroll"}}>
{providers.map((name) => (
<DropdownItem tag="a" onClick={(e) => dropSearch(e.target.text)} style={{ color: "rgb(68, 68, 68)", fontSize: "12px" }}>{name.fullName}</DropdownItem>
))}
</DropdownMenu>
</UncontrolledDropdown>
</Col>
<Col md={hasAudit ? "2" : "3"}>
<UncontrolledDropdown>
<DropdownToggle tag="a" caret>
Location
</DropdownToggle>
<DropdownMenu style={{ maxHeight:"400px", overflow: "scroll"}}>
{stateChoices.map((states) => (
<DropdownItem tag="a" onClick={(e) => dropSearch(e.target.text)} style={{ color: "rgb(68, 68, 68)", fontSize: "12px" }}>{states}</DropdownItem>
))}
</DropdownMenu>
</UncontrolledDropdown>
</Col>
如何在渲染后将 e.target.value 重置为空,以便用户可以再次搜索?
【问题讨论】:
标签: javascript reactjs components react-props