首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用autosuggest作为TextInput?

如何使用autosuggest作为TextInput?
EN

Stack Overflow用户
提问于 2019-01-14 19:29:45
回答 1查看 346关注 0票数 0

我正在尝试将自动建议测试(react- autosuggest )作为TextInput。它可以作为TextField使用,但当我尝试在SimpleFormLayout中使用它时,自动建议输入没有发送任何数据。

使用我的输入的位置:

代码语言:javascript
复制
const CardEdit = ({ record } = this.props) => (
    <Card>
        <SimpleFormLayout record={record}>
            <TextInput label="fields.id" source="id" />
            <AutoSuggestInput label="fields.title" source="title" />
        </SimpleFormLayout>
    </Card>
)

输入值似乎没有被正确读取,你知道为什么吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-14 19:30:12

和我的autosuggest输入:

代码语言:javascript
复制
class AutoSuggestInput extends React.Component {
    constructor(props) {
        super(props)

        this.state = {
            value: String(initValue),
            suggestions: [],
        }

        this.lastRequestId = null
        this.selected = null

        this.renderInputComponent = this.renderInputComponent.bind(this)
        this.onSuggestionsFetchRequested = this.handleSuggestionsFetchRequested.bind(this)
        this.onSuggestionsClearRequested = this.handleSuggestionsClearRequested.bind(this)
        this.getSuggestionValue = this.getSuggestionValue.bind(this)
        this.onSuggestionSelected = this.onSuggestionSelected.bind(this)
    }

    renderInputComponent(inputProps) {
        const { classes, inputRef = () => { }, ref, ...other } = inputProps

        return (
            <TextField
                fullWidth
                InputProps={{
                    inputRef: node => {
                        ref(node)
                        inputRef(node)
                    },
                    classes: {
                        root: classes.inputRoot,
                        input: classes.inputInput,
                    },
                    disableUnderline: true,
                }}
                {...other}
            />
        )
    }

    getSuggestionValue(suggestion) {
        return suggestion.id
    }

    // eslint-disable-next-line no-unused-vars
    renderSuggestion(suggestion, { query, isHighlighted }) {
        return (
            <div>
                {suggestion.label}
            </div>
        )
    }

    handleSuggestionsFetchRequested = ({ value }) => {
        // Cancel the previous request
        if (this.lastRequestId !== null) {
            clearTimeout(this.lastRequestId)
        }

        this.lastRequestId = setTimeout(() => {
            // fetch
        }, 500)
    }

    handleSuggestionsClearRequested = () => {
        this.setState({
            suggestions: []
        })
    }

    handleChange = () => (event, { newValue, method }) => {
        if (method === 'click') return
        this.setState({
            value: newValue,
        })
        this.selected = null
    }

    onSuggestionSelected = (event, { suggestion }) => {
        this.selected = suggestion.id
    }

    render() {
        const {
            classes,
            translate,
        } = this.props

        const autosuggestProps = {
            renderInputComponent: this.renderInputComponent,
            suggestions: this.state.suggestions,
            onSuggestionsFetchRequested: this.handleSuggestionsFetchRequested,
            onSuggestionsClearRequested: this.handleSuggestionsClearRequested,
            getSuggestionValue: this.getSuggestionValue,
            renderSuggestion: this.renderSuggestion,
            onSuggestionSelected: this.onSuggestionSelected,
        }

        return (
            <div>
                <Autosuggest
                    {...autosuggestProps}
                    inputProps={{
                        classes,
                        placeholder: translate('search') + '...',
                        value: this.selected ? String(this.selected) : this.state.value,
                        onChange: this.handleChange(),
                    }}
                    getSectionSuggestions={section => section.items}
                />
            </div>
        )
    }
}

const enhance = compose(
    withStyles(styles),
    translate,
)

export default enhance(AutoSuggestInput)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54180654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档