首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJS:如何为sortableJS动态设置禁用选项?

ReactJS:如何为sortableJS动态设置禁用选项?
EN

Stack Overflow用户
提问于 2017-06-12 07:41:00
回答 1查看 1.3K关注 0票数 1

我正在使用npm包react-sortablejs。在我的组件中,我想动态地设置disabled选项。现在,我的组件看起来如下:

代码语言:javascript
复制
class Example extends Component {
    constructor(props) {
        super(props)
        this.state = { }
    }

    render() {
        const   { disabled } = this.props // <-- Boolean value as property

        return (
            <List>
                <Sortable
                    options={{
                        handle   : '.sortable-handle',
                        draggable: '.sortable-item',
                        disabled : disabled // <-- Use the bool value
                    }}
                >
                    <Items>
                </Sortable>
            </List>
        )
    }
}

disabled值存储在DB中。如果该值发生更改,则应禁用/启用可排序。但以这种方式是行不通的。

该包基于RubaXa/Sortable。在那里,我可以像这样设置残疾人选项:

代码语言:javascript
复制
var sortable = Sortable.create(list);

document.getElementById("switcher").onclick = function () {
    var state = sortable.option("disabled"); // get

    sortable.option("disabled", !state); // set
};

但是,我如何在一个反应组件中以动态的方式实现这一点呢?

更新

按照我的做法,disabled选项最初是在呈现组件时设置的。如果呈现后值发生变化,则选项不会更改,因此,如果值从true更改为false,则禁用的-选项仍然保持为真。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-12 10:05:31

我认为你必须绑定整个“选项”变量。从中缺少维护人员来判断,它还没有真正绑定到嵌套值。

试着把选项放到州里。

代码语言:javascript
复制
 constructor(props) {
        super(props);
        this.state = {
           option : {
                        handle   : '.sortable-handle',
                        draggable: '.sortable-item',
                        disabled : true
                    }
        }
    }

绑定州的选项

代码语言:javascript
复制
 <Sortable options={this.state.option}>
                    <Items>
 </Sortable>

在ComponentDidUpdate()上,执行以下操作:

代码语言:javascript
复制
componentDidUpdate(prevProps, prevState) {
  if(prevProps.disabled !== this.props.disabled){
    this.setState({option : Object.assign({}, this.state.option, {disabled: this.props.disabled})})
 }
}

我的内脏告诉我,由于嵌套的道具,组件不识别禁用的更新。必须更新整个选项,以使其识别更改。

OR>

您可以将这些选项作为道具传递。并在每次禁用的组件更改时,对父组件执行更新。

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

https://stackoverflow.com/questions/44493890

复制
相关文章

相似问题

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