小编典典

如何从Reactjs组件的状态对象中删除属性

reactjs

如果我有一个在其状态上设置了属性的react组件:

onClick() {
    this.setState({ foo: 'bar' });
}

是否可以从"foo"此处删除Object.keys(this.state)

replaceState方法看起来像明显的方法来尝试,但它至今已贬值。


阅读 432

收藏
2020-07-22

共1个答案

小编典典

您可以设置fooundefined,像这样

var Hello = React.createClass({
    getInitialState: function () {
        return {
            foo: 10,
            bar: 10
        }
    },

    handleClick: function () {
        this.setState({ foo: undefined });
    },

    render: function() {
        return (
            <div>
                <div onClick={ this.handleClick.bind(this) }>Remove foo</div>
                <div>Foo { this.state.foo }</div>
                <div>Bar { this.state.bar }</div>
            </div>
        );
    }
});

Example

更新资料

先前的解决方案只是从中删除价值fookey
存在的技能state,如果您需要从中完全删除密钥state,则可能的解决方案之一可以是setState与一位父母同住 key ,就像这样

var Hello = React.createClass({

  getInitialState: function () {

    return {

      data: {

        foo: 10,

        bar: 10

      }

    }

  },



  handleClick: function () {

    const state = {

      data: _.omit(this.state.data, 'foo')

    };



    this.setState(state, () => {

      console.log(this.state);

    });

  },



  render: function() {

    return (

      <div>

        <div onClick={ this.handleClick }>Remove foo</div>

        <div>Foo { this.state.data.foo }</div>

        <div>Bar { this.state.data.bar }</div>

      </div>

    );

  }

});



ReactDOM.render(<Hello />, document.getElementById('container'))


<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="container"></div>
2020-07-22