错误 - 未显示 PrimeReact 自动完成建议
Error - PrimeReact Autocomplete suggestions not showing
https://primefaces.org/primereact/showcase/#/autocomplete
我正在尝试在组件加载 componentDidMount
中的一些数据后立即加载建议下拉列表。 suggestionsList
正在使用 componentDidMount
中的 obj
数据进行更新,但未显示建议下拉列表。
简单地说,只要输入得到焦点并且没有输入文本,就应该显示一个建议下拉列表。
abcCmp.jsx
class abcCmp extends React.Component {
state;
constructor() {
super();
this.state = {
suggestionsList: []
};
}
componentDidMount() {
let obj = [{'color':'red',name: 'Danny', id: '1'}];
this.setState({suggestionsList: [...obj]})
}
render(){
return (
<div className="containerBox">
<AutoComplete suggestions={this.state.suggestionsList}
minLength={1} placeholder="Add People" field="name" multiple={true}
autoFocus={true} />
</div>
)
}
在自动完成标签内添加下拉列表,并添加 completeMethod 并将其绑定到 search/filter 函数,添加一个值以绑定所选值,为其添加一个 onChange 函数
您可以在此处找到完整的文档和工作示例:PrimeFaces React Autocomplete
如果您阅读了文档,还需要其他参数。
它们是:completeMethod
、value
、onChange
其中 completeMethod
需要在您键入时显示筛选列表。在 completeMethod
中,您需要过滤数据,这就是您输入更多内容时下拉列表会减少的方式。
您需要 ref
来切换下拉功能,如果输入值为空且未选择任何值,您还需要检查焦点,以便切换下拉。
这是我创建的简单POC,供参考。尝试输入 D
代码:
import React from "react";
import { AutoComplete } from "primereact/autocomplete";
import "./styles.css";
let obj = [
{ color: "red", name: "Dagny", id: "1" },
{ color: "red", name: "kanny", id: "2" },
{ color: "red", name: "Dgnny", id: "3" },
{ color: "red", name: "Danny", id: "4" },
{ color: "red", name: "Dmnny", id: "5" },
{ color: "red", name: "Donny", id: "" }
];
class MyComponent extends React.Component {
myRef = React.createRef();
constructor() {
super();
this.state = {
suggestionsList: [],
selected: null,
inputValue: null
};
}
componentDidMount() {
this.setState({ suggestionsList: [...obj] });
}
searchList = (event) => {
let suggestionsList;
if (!event.query.trim().length) {
suggestionsList = [...obj];
} else {
suggestionsList = [...obj].filter((list) => {
return list.name.toLowerCase().startsWith(event.query.toLowerCase());
});
}
this.setState({ suggestionsList });
};
render() {
return (
<div className="containerBox">
<AutoComplete
suggestions={this.state.suggestionsList}
completeMethod={this.searchList}
minLength={1}
ref={this.myRef}
dropdown
inputId="my"
placeholder="Add People"
field="name"
onFocus={(e) => {
if (!this.state.inputValue && !this.state.selected) {
this.myRef.current.onDropdownClick(e, "");
}
}}
onKeyUp={(e) => this.setState({ inputValue: e.target.value })}
// completeOnFocus={true}
multiple={true}
autoFocus={true}
value={this.state.selected}
onChange={(e) => this.setState({ selected: e.value })}
/>
</div>
);
}
}
export default function App() {
return (
<div className="App">
<MyComponent />
</div>
);
}
演示:https://codesandbox.io/s/prime-react-autocomplete-forked-n3x2x?file=/src/App.js
https://primefaces.org/primereact/showcase/#/autocomplete
我正在尝试在组件加载 componentDidMount
中的一些数据后立即加载建议下拉列表。 suggestionsList
正在使用 componentDidMount
中的 obj
数据进行更新,但未显示建议下拉列表。
简单地说,只要输入得到焦点并且没有输入文本,就应该显示一个建议下拉列表。
abcCmp.jsx
class abcCmp extends React.Component {
state;
constructor() {
super();
this.state = {
suggestionsList: []
};
}
componentDidMount() {
let obj = [{'color':'red',name: 'Danny', id: '1'}];
this.setState({suggestionsList: [...obj]})
}
render(){
return (
<div className="containerBox">
<AutoComplete suggestions={this.state.suggestionsList}
minLength={1} placeholder="Add People" field="name" multiple={true}
autoFocus={true} />
</div>
)
}
在自动完成标签内添加下拉列表,并添加 completeMethod 并将其绑定到 search/filter 函数,添加一个值以绑定所选值,为其添加一个 onChange 函数 您可以在此处找到完整的文档和工作示例:PrimeFaces React Autocomplete
如果您阅读了文档,还需要其他参数。
它们是:completeMethod
、value
、onChange
其中 completeMethod
需要在您键入时显示筛选列表。在 completeMethod
中,您需要过滤数据,这就是您输入更多内容时下拉列表会减少的方式。
您需要 ref
来切换下拉功能,如果输入值为空且未选择任何值,您还需要检查焦点,以便切换下拉。
这是我创建的简单POC,供参考。尝试输入 D
代码:
import React from "react";
import { AutoComplete } from "primereact/autocomplete";
import "./styles.css";
let obj = [
{ color: "red", name: "Dagny", id: "1" },
{ color: "red", name: "kanny", id: "2" },
{ color: "red", name: "Dgnny", id: "3" },
{ color: "red", name: "Danny", id: "4" },
{ color: "red", name: "Dmnny", id: "5" },
{ color: "red", name: "Donny", id: "" }
];
class MyComponent extends React.Component {
myRef = React.createRef();
constructor() {
super();
this.state = {
suggestionsList: [],
selected: null,
inputValue: null
};
}
componentDidMount() {
this.setState({ suggestionsList: [...obj] });
}
searchList = (event) => {
let suggestionsList;
if (!event.query.trim().length) {
suggestionsList = [...obj];
} else {
suggestionsList = [...obj].filter((list) => {
return list.name.toLowerCase().startsWith(event.query.toLowerCase());
});
}
this.setState({ suggestionsList });
};
render() {
return (
<div className="containerBox">
<AutoComplete
suggestions={this.state.suggestionsList}
completeMethod={this.searchList}
minLength={1}
ref={this.myRef}
dropdown
inputId="my"
placeholder="Add People"
field="name"
onFocus={(e) => {
if (!this.state.inputValue && !this.state.selected) {
this.myRef.current.onDropdownClick(e, "");
}
}}
onKeyUp={(e) => this.setState({ inputValue: e.target.value })}
// completeOnFocus={true}
multiple={true}
autoFocus={true}
value={this.state.selected}
onChange={(e) => this.setState({ selected: e.value })}
/>
</div>
);
}
}
export default function App() {
return (
<div className="App">
<MyComponent />
</div>
);
}
演示:https://codesandbox.io/s/prime-react-autocomplete-forked-n3x2x?file=/src/App.js