1

场景:自动完成

  1. HTMLinput元素的值被转移到 redux 状态。
  2. 这个 redux-state 定义了一个使用 tracker 注入的查询(如下图所示)。
  3. 查询结果显示为自动完成选项。

问题:组件不会在input-value 更改时重新加载

input当-value 更改时,如何重新加载组件?

代码片段

const AutoComplete = (props) => {
    let handleChange = (event) => {
        props.setSearchQuery(event.target.value);
    };

    return (
        <div>
            <input
                type="text"
                onChange={(event) => handleChange(event)}
            />
        </div>
    );
};

export default connect(
    (state) => ({
        searchQuery: selectors.getSearchQuery(state)
    }),
    (dispatch) => ({
        setSearchQuery: (queryString) => dispatch(actions.setSearchQuery(queryString))
    })
)(
    composeWithTracker(
        (props, onDate) => {
            const searchResults = props.searchFunction(props.searchQuery);
            onDate(null, {searchResults});
        }
    )(AutoComplete)
);
4

1 回答 1

0

我认为这是因为您发送了一个动作。但是 AutoComplete 的 props 没有改变,所以组件不会渲染。

const AutoComplete = (props) => {
    let handleChange = (event) => {
        props.setSearchQuery(event.target.value);
    };

    return (
        <div>
            <input
                type="text"
                onChange={(event) => handleChange(event)}
            />
            <span>{this.props.searchQuery}</span>
        </div>
    );
};

只需确保searchQuery在您的组件中使用了道具

于 2016-06-16T03:05:02.373 回答