1

React Bootstrapを使用していますが、OverlayTrigger/Popover の使用中に問題が発生しています。ポップオーバーを閉じて再度開くと、状態<ComponentWithState />が破棄されます。

問題の実例。複製するには: ボタンをクリックし、リンクをクリックして、テキストが「状態: オフ」から「状態: オン」にどのように変化したかを確認します。ポップオーバーを閉じて (横をクリックするか、ボタンを再クリック)、ボタンを再クリックしてポップオーバーを開きます。テキストに「状態: オフ」と表示されていることに注目してください。状態が持続しませんでした (「状態: オン」とは言いません)。

ポップオーバーを閉じる/再開する間、状態を持続させる方法を考えていますか?

'use strict';

var React = require('react');
var Popover = require('react-bootstrap/lib/Popover');
var Button = require('react-bootstrap/lib/Button');
var OverlayTrigger = require('react-bootstrap/lib/OverlayTrigger');

var ComponentWithState = React.createClass({
  getInitialState: function() {
    return {
      value: false
    };
  },

  changeToTrue: function(e) {
    e.preventDefault();
    this.setState({value: true});
  },

  render: function() {
    return (
      <div>
        <div><a href="#" onClick={this.changeToTrue}>Change state to On</a></div>
        <div>State: {this.state.value ? 'On' : 'Off'}</div>
      </div>
    );
  }
});

var App = React.createClass({
  render: function() {
    var children = (
      <Popover title="Something">
        <ComponentWithState />
      </Popover>
    );

    return (
      <OverlayTrigger trigger="click" rootClose overlay={children}>
        <Button>Options</Button>
      </OverlayTrigger>
    );
  }
});

React.render(
  <App />,
  document.getElementById('container')
);
4

1 に答える 1