【问题标题】:Rerender React component from legacy (plain JS) app从遗留(纯 JS)应用程序重新渲染 React 组件
【发布时间】:2020-12-05 17:14:12
【问题描述】:

在遗留 Web 应用程序中,我们尝试逐步引入 React。我们的第一个组件是一个日期选择器,它只有一个带有初始值的道具:

<DatePicker date="2020-08-15" />

这在基本情况下可以正常工作。

现在我们要在列出多个事件的事件列表页面上使用该组件。如果用户单击事件,则会显示一个小的编辑器对话框,可以在其中编辑事件日期。事件日期在这样的数据属性中:

<div class="event" data-event-date="2020-08-15">...</div>
<div class="event" data-event-date="2020-09-25">...</div>
<div class="event" data-event-date="2020-10-07">...</div>

请注意,此页面使用纯 JavaScript,因此为所有事件项分配了一个简单的单击事件处理程序。此事件处理程序显示带有 DatePicker React 组件的对话框。

如何使用分配给所选事件的日期值重新呈现 DatePicker 组件?

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    这是一个非常快速的模型。您将需要实施更强大的检查,并且显然要根据您的代码库调整细节,但这说明了基本的 vanilla/React 交互。

    let DATE = null;
    
    function Confirmation({date}) {
      return (
            <div>
          {date ? (
                <DatePicker date={date} />
            ) : null
            }
        </div>
      );
    }
    
    function DatePicker({date}) {
        return (
        <div class="datepicker">{date}</div>
      );
    }
    
    function setDate(e) {
        DATE = e ? e.target.getAttribute('data-event-date') : null;
      ReactDOM.render(<Confirmation date={DATE} />, document.getElementById("root"));
    }
    
    document.querySelectorAll('.event').forEach(el => el.addEventListener('click',(e) => setDate(e)))
    
    ReactDOM.render(<Confirmation data={DATE} />, document.getElementById("root"));
    #container {
      margin: 8px auto;
    }
    
    btn {
      background-color: gray;
      border: 1px solid black;
      padding: 4px;
      margin: 8px;
    }
    
    .datepicker {
      padding: 8px;
      margin: 8px;
      background-color: green;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
    
    <div id="container">
      <btn type="button" class="event" data-event-date="2020-08-15">2020-08-15</btn>
      <btn type="button" class="event" data-event-date="2020-09-25">2020-09-25</btn>
      <btn type="button" class="event" data-event-date="2020-10-07">2020-10-07</btn>
      <btn type="button" class="event" onClick="setDate(null)">Clear</btn>
    
      <div id="root"></div>
    </div>

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 2016-01-11
      • 1970-01-01
      • 2021-12-29
      • 2021-06-19
      • 2018-04-22
      • 1970-01-01
      • 2017-05-12
      相关资源
      最近更新 更多