gpt4 book ai didi

javascript - react-select 可以加载异步数据

转载 作者:行者123 更新时间:2023-12-01 01:55:44 25 4
gpt4 key购买 nike

我正在尝试使用 react-select 构建一个选择组件插入。

在实现这个项目的过程中,我遇到了一些棘手的问题。在这里查看我的源代码:https://codesandbox.io/s/j148r99695

  1. 我遇到的问题是我想从服务器获取所有类型列表数据并将它们映射到选择组件。但不知怎的,或者我做错了什么,它不起作用。请参阅上面的源代码来帮助我。

  2. 我从 Movies 获取数据成分。它工作得很好,我将一个 Prop 传递给 FormFilter组件:<FormFilter genresList={this.state.genres} /> 。并在 FormFilter组件,我检查this.props.genresList ,可用。但是当我尝试将其分配给 FormFilter 时状态和console.log("state", this.state.genres);那。它是空的。谁能告诉我为什么?

  3. 默认react-select使用valuelabel显示数据以选择组件。但你知道在某些情况下我们必须定制它。我通过使用 map 转换为其他数组来尝试一下。但这是最好的方法吗?如何定制valueKeylabelKey .

我正在使用react-select测试版2。

更新:我的项目已修复。请查看下面的链接。不知怎的,它不起作用。我在源代码中受到了赞扬。

https://codesandbox.io/s/moym59w39p

最佳答案

为了使其正常工作,我更改了 FormFilter.js 实现:

import React, { Component } from "react";
import * as Animated from "react-select/lib/animated";
import AsyncSelect from "react-select/lib/Async";

class FormFilter extends Component {
constructor(props) {
super(props);
this.state = {
inputValue: "",
selectedOption: "",
genres: []
};
}

selectGenreHandleChange = newValue => {
const inputValue = newValue.replace(/\W/g, "");
this.setState({ inputValue });
console.log(inputValue);
};

componentDidMount() {
this.genresOption();
}

filterGenres = inputValue => {
const genres = this.genresOption();
//HERE - return the filter
return genres.filter(genre =>
genre.label.toLowerCase().includes(inputValue.toLowerCase())
);
};

promiseOptions = inputValue => {
return new Promise(resolve => { // HERE - you have to return the promise
setTimeout(() => {
resolve(this.filterGenres(inputValue));
}, 1000);
});
};

genresOption() {
const options = [];
const genres = this.props.genresList.genres; //HERE - array is genres in genresList
if (genres && genres instanceof Array) {
genres.map(genre => options.push({ value: genre.id, label: genre.name}));
}
return options;
}

render() {
const { inputValue } = this.state;

if (this.state.genres) console.log("state", this.state.genres);

if (this.props.genresList)
console.log("Movies props", this.props.genresList);

return (
<div className="filter_form">
<span className="search_element full">
<label htmlFor="genres">Genres</label>
<AsyncSelect
className="select genres"
classNamePrefix="tmdb_select"
isMulti
isSearchable="true"
isClearable="true"
cacheOptions
components={Animated}
value={inputValue}
defaultOptions
onInputChange={this.selectGenreHandleChange}
loadOptions={this.promiseOptions}
/>
</span>
</div>
);
}
}

export default FormFilter;

我写了一条评论“这里 - 一些东西”让你知道我改变了什么。没什么大问题:)

关于javascript - react-select 可以加载异步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51056639/

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