javascript - 如何重用具有不同状态的 React 组件

标签 javascript reactjs code-reuse

我正在创建一个列表,显示具有不同输入的不同行。不同的输入取决于所选内容,但我的问题是它们在所有行中都发生了变化……我不知道如何做好。

一个例子:

我有一个父元素(橙色),根据第一个选择元素中的选择,子元素发生变化(蓝色)。

Parent and child element screenshot

但问题是,当我选择一个选项时,不同行的所有子项都会发生变化(蓝色)。

The problem screenshot

这里,父组件代码:

class FilterByDateCondition extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            dateTypeCondition: "calendar",
        };
    }

    componentDidMount() {
        $('.date-condition-select').select2({
            width: '100%',
                minimumResultsForSearch: Infinity,
        })

        const s = this;
        $('.date-type-condition-select').select2({
            width: '100%',
            minimumResultsForSearch: Infinity,
        }).on("select2:select", function (e) {
            let state = s.state;
            state.dateTypeCondition = $(this).val();
            s.setState(state);
        });
    }

    _drawDateTypeCondition(dateTypeCondition) {
        if (dateTypeCondition == "calendar") {
            return <DateCalendar/>
        }
        else if (dateTypeCondition == "expression") {
            return <DateExpression/>
        }
    }

    render() {
        return (<div className="row">
                <div className="col-md-3">
                    <select className="date-type-condition-select">
                        <option value="calendar">{gettext("Calendar")}    </option>    
                        <option value="expression">{gettext("Expression")}</option>
                    </select>
                </div>
                <div className="col-md-2">
                    <select className="date-condition-select">
                        <option value="<">{"<"}</option>
                        <option value=">">{">"}</option>
                        <option value="==">{"=="}</option>
                    </select>
                </div>
                <div className="col-md-7">
                    {this._drawDateTypeCondition(this.state.dateTypeCondition)}
                </div>
            </div>
        );
    }
}

子组件显示在函数 _drawDateTypeCondition

如何复用组件??

非常感谢!!! : ]

最佳答案

我认为这与您使用的类有关。两个父组件中的选择标签具有相同的类,并且由于您正在使用类选择器来触发 componentDidMount 函数中的操作,因此选择哪个选择并不重要,只要它具有类。

我认为更好的方法是使用不同的标识符或向触发单独定义的成员函数的选择标记添加 onClick 或 onSelect 事件。

我希望这是有道理的。

关于javascript - 如何重用具有不同状态的 React 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48752727/

相关文章:

javascript - 切换工具提示文本

reactjs - React-select 组件值未更新。

development-environment - 有没有办法组合 Nix 表达式来为 `nix-shell` 创建开发环境

d3.js - 如何将 ObservableHq 简单算法解释为可重用的代码片段?

ios - 为所有 UIImageView 添加圆角

javascript - AngularJS 对象序列化的缺点

javascript - 使用 Javascript 中的 Select 值预览图像

javascript - 从两个下拉列表中获取值时出现问题

javascript - 我需要 bindActionCreators 吗?

javascript - 如何使用同一类的另一个方法更新构造函数中的状态?