2

我正在尝试使用react-select 组件的异步版本。我的正常版本工作得很好,但是当我添加尝试使用项目文档中的这个异步示例时:

var Select = require('react-select');

var getOptions = function(input, callback) {
    setTimeout(function() {
        callback(null, {
            options: [
                { value: 'one', label: 'One' },
                { value: 'two', label: 'Two' }
            ],
            // CAREFUL! Only set this to true when there are no more options,
            // or more specific queries will not be sent to the server.
            complete: true
        });
    }, 500);
};

<Select.Async
    name="form-field-name"
    loadOptions={getOptions}
/>

我在控制台中收到此错误:

警告:React.createElement:类型不应为 null、未定义、布尔值或数字。它应该是一个字符串(对于 DOM 元素)或一个 ReactClass(对于复合组件)。检查 OrderHeaderEdit.

我一直在尝试将其调试到 React 代码中,但我一生都无法弄清楚发生了什么。

这是我对上面具有异步选择组件的组件的完整组件代码。此控件在 Meteor 1.3 应用程序中运行:

import React from 'react';
import Select from 'react-select';

const OrderHeaderEdit = React.createClass({

    getOptions(input, callback) {
        setTimeout(function () {
            callback(null, {
                options: [
                    { value: 'one', label: 'One' },
                    { value: 'two', label: 'Two' }
                ],
                // CAREFUL! Only set this to true when there are no more options,
                // or more specific queries will not be sent to the server.
                complete: true
            });
        }, 500);
    },

    render() {
        console.log("OrderHeaderEdit props: ", this.props);

        var getOptions = function (input, callback) {
            setTimeout(function () {
                callback(null, {
                    options: [
                        { value: 'one', label: 'One' },
                        { value: 'two', label: 'Two' }
                    ],
                    // CAREFUL! Only set this to true when there are no more options,
                    // or more specific queries will not be sent to the server.
                    complete: true
                });
            }, 500);
        };

        return (
            <div>

                <Select.Async
                    name="form-field-name"
                    loadOptions={getOptions}
                />

            </div>
        );
    }
});

export default OrderHeaderEdit;

似乎问题可能出在行中的“.Async”扩展名上Select.Async,这可能会让 Meteor 感到困惑吗?

4

1 回答 1

2

我找出了问题所在:从 npm 安装当前安装的是 0.9.x 版本,但文档和示例已经更新到 1.0.0-betaX 版本,其中有重大更改。

因此,这Select.Async确实是问题所在,该语法仅从 1.0 开始存在,如react-select github 存储库中 1.0.0 中的重大更改列表中所述。更新我的代码以使用 1.0.0-beta9 版本解决了这个问题。

于 2016-02-17T17:16:49.620 回答