在reactjs

时间:2018-04-03 10:41:56

标签: reactjs bootstrap-modal twitter-bootstrap-4

我正在使用React 16 Bootstrap 4。 我正在使用bootstrap模式来显示一些值。每当模态关闭时我都需要重置这些值。

对于Modal,我创建了一个单独的组件。我不想使用React-Modal,因为我获得了当前模式中的所有功能。

我在简单的javascript中知道它是使用以下代码实现的:

$(".modal").on("hidden.bs.modal"){
    //reset values here
};

但我不知道ReactJS是如何实现的?

以下是我的模态代码:

<div className="modal fade modal-flex" id="large-Modal-OneUser" tabIndex={-1} role="dialog">
            <div className="modal-dialog modal-lg" role="document">
                <div className="modal-content">
                    <div className="modal-header" style={{display: 'block'}}>
                        <div className="row">
                            <div className="col-md-6">
                                <h2 style={{fontWeight:600}}>{newTimelineData.length > 0 ? newTimelineData[0].candidateName : ""}</h2>
                            </div>
                            <div className="col-md-6">
                                <span style={{display: 'inline-flex',alignItems: 'center',float:'right'}}><h4 style={{paddingRight:20}}>{isNotEmpty(this.state.scheduledFor) ? moment(this.state.scheduledFor).format("DD-MMM-YYYY"):this.checkScheduledFor(newTimelineData)}</h4>
                                    <h3 style={{paddingRight: 10}}>{isNotEmpty(this.state.probability) ? this.getProbabilityHTML() : this.checkProbability(newTimelineData)}</h3>
                                    {/*<button type="button" className="close" data-dismiss="modal" aria-label="Close" style={{marginTop: 0,marginBottom: 10}}>
                                    <span aria-hidden="true">×</span>
                                </button>*/}
                                </span>

                            </div>
                        </div>
                    </div>
                    <div className="modal-body">
                        <div className="col-md-12">
                            {/*<div className="card">*/}
                            {/*<div className="card-block">*/}
                                    {/* Horizontal Timeline start */}
                                    <div className="cd-horizontal-timeline">
                                        <div className="timeline">
                                            <div className="events-wrapper">
                                                <div className="events" id="foo">
                                                    <ol>
                                                        {newTimelineData.map((item, index) => (
                                                            <li key={item.id}>
                                                                <a
                                                                    href="#0" onClick={()=> this.setHeaders(item)}
                                                                    data-date={moment(item.scheduledFor).format('DD/MM/YYYY')}
                                                                    className={index === 0 ? 'selected' : null}>
                                                                    <Moment unix format="DD MMM">
                                                                        {item.scheduledFor / 1000}
                                                                    </Moment>
                                                                </a>
                                                            </li>
                                                        ))}
                                                    </ol>
                                                    <span className="filling-line" aria-hidden="true" />
                                                </div>
                                                {/* .events */}
                                            </div>
                                            {/* .events-wrapper */}
                                            <ul className="cd-timeline-navigation">
                                                <li>
                                                    <a href="#0" className="prev inactive">
                                                        Prev
                                                    </a>
                                                </li>
                                                <li>
                                                    <a href="#0" className="next">
                                                        Next
                                                    </a>
                                                </li>
                                            </ul>
                                            {/* .cd-timeline-navigation */}
                                        </div>
                                        {/* .timeline */}
                                        <div className="events-content">
                                            <ol>
                                                {newTimelineData.map((item, index) => (
                                                    <li
                                                        key={item.id}
                                                        className={index === 0 ? 'selected' : null}
                                                        data-date={moment(item.scheduledFor).format('DD/MM/YYYY')}>
                                                        <div className="row">
                                                            <div className="col-sm-8" style={{fontSize:'1rem',paddingLeft: 3,paddingRight:0}}><b>Job</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: {item.jobName}</div>
                                                            {isNotEmpty(joiningDate) && <div className="col-sm-4" style={{fontSize:'1rem',paddingLeft: 3,paddingRight:0}}><b>Joined Date &nbsp;: </b>{joiningDate}</div>}
                                                        </div>
                                                        <div className="row">
                                                            <div className="col-sm-8" style={{fontSize:'1rem',padding:0}}><b>Stage</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: {this.props.stage}</div>
                                                            {isNotEmpty(offerDate) && <div className="col-sm-4" style={{fontSize:'1rem',paddingLeft: 0,paddingRight:0}}><b>Offer Date &nbsp;&nbsp;&nbsp;&nbsp;: </b>{offerDate}</div>}
                                                        </div>
                                                        <br></br>
                                                        <div className="row">
                                                            <div className="col-sm-12" style={{fontSize:'1rem',paddingLeft: 0}}><b>Comments</b> :<br></br>{item.comments}</div>
                                                        </div>
                                                    </li>
                                                ))}
                                            </ol>
                                        </div>
                                        {/* .events-content */}
                                    </div>

                                    {/* Horizontal Timeline end */}
                                    {/*</div>*/}
                                    {/*</div>*/}
                        </div>
                    </div>
                    <div className="modal-footer">
                        <button style={{backgroundColor: '#8080808f',borderColor:'#8080808f'}}
                            type="button"
                            className="btn btn-primary waves-effect waves-light"
                            data-dismiss="modal">
                            Close
                        </button>
                    </div>
                </div>
            </div>
        </div>

有人可以帮忙吗?

请参阅下面的快照,了解@Jayavel建议我尝试的工作。enter image description here

1 个答案:

答案 0 :(得分:0)

实施了一个小的解决方法并希望它能满足您的需求。根据我的理解,您可以使用状态加载模态体,用户将更改某些内容并将它们存储在相同的状态。

关闭模态(关闭按钮)时,需要重置初始状态,即重置为默认值。

是对的!!! check this demo

你需要的是,

存储您的默认状态,如下所示:

const initialState = {
     isOpen: false, 
     value: "defaultvalue"
};

并在组件中:

class App extends Component {
  constructor(props) {
    super(props);
    this.state = initialState; // stored defaultstate
  }

  toggleModal = () => {
    this.setState({
      isOpen: !this.state.isOpen
    });
  }

  toggleModalClose = () => {  // modal close to reset input val
    this.setState(initialState);
  }

  handleChange = (e) => {
    this.setState({
      value: e.target.value //input new value
    });
  }

  render() {
    return (
      <div className="App">
        <button onClick={this.toggleModal}>
          Open the modal
        </button>

        <Modal show={this.state.isOpen}
          onClose={this.toggleModalClose}>
          <input type="text" value={this.state.value} onChange={this.handleChange} />
        </Modal>
      </div>
    );
  }
}

希望这有帮助。