Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重用如何对不同状态的组件作出反应_Javascript_Reactjs_Code Reuse - Fatal编程技术网

Javascript 重用如何对不同状态的组件作出反应

Javascript 重用如何对不同状态的组件作出反应,javascript,reactjs,code-reuse,Javascript,Reactjs,Code Reuse,我正在创建一个列表,显示具有不同输入的不同行。不同的输入是以选定的为条件的,但我的问题是它们在所有行中都会改变。。。我不知道怎样才能做好 例如: 我有一个父元素(橙色),根据第一个选择元素中的所选元素,子元素会发生变化(蓝色) 但问题是,当我选择一个选项时,不同行的所有子行都会更改(蓝色) 此处,父组件代码: class FilterByDateCondition extends React.Component { constructor(props) { super

我正在创建一个列表,显示具有不同输入的不同行。不同的输入是以选定的为条件的,但我的问题是它们在所有行中都会改变。。。我不知道怎样才能做好

例如:

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

但问题是,当我选择一个选项时,不同行的所有子行都会更改(蓝色)

此处,父组件代码:

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>
        );
    }
}
类FilterByDateCondition扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
dateTypeCondition:“日历”,
};
}
componentDidMount(){
$('.date条件选择')。选择2({
宽度:“100%”,
搜索的最小结果:无穷大,
})
常数s=这个;
$('.date-type-condition-select')。选择2({
宽度:“100%”,
搜索的最小结果:无穷大,
}).打开(“选择2:选择”,功能(e){
设state=s.state;
state.dateTypeCondition=$(this.val();
s、 设置状态(状态);
});
}
_drawDateTypeCondition(dateTypeCondition){
如果(dateTypeCondition==“日历”){
返回
}
else if(dateTypeCondition==“表达式”){
返回
}
}
render(){
返回(
{gettext(“日历”)}
{gettext(“表达式”)}
{"">{">"}
{"=="}
{this.\u drawDateTypeCondition(this.state.dateTypeCondition)}
);
}
}
子组件显示在函数
\u drawDateTypeCondition

如何重用组件


非常感谢!!!:]

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

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


我希望这是有意义的。

这非常有效!!非常感谢您的帮助。我正在考虑改变,因为重复ID是一种不好的做法…但我认为这不会解决问题。谢谢!!!