Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为jQuery日期选择器创建React.js内联门户_Javascript_Reactjs - Fatal编程技术网

Javascript 如何为jQuery日期选择器创建React.js内联门户

Javascript 如何为jQuery日期选择器创建React.js内联门户,javascript,reactjs,Javascript,Reactjs,我看了, 读到 我得到了门户的概念,你在欺骗React停止对一块DOM的渲染,然后继续渲染,这样你就可以通过使它的虚拟DOM失去同步来修补那块DOM,而不会混淆React 我的问题是,这些示例都涉及一个对话框,该对话框在页面末尾呈现,但在查看代码时显示为内联。使用jQuery模式是一个很酷的技巧,但是我需要一个jQuery日期选择器,它的div实际上保留在我放置它的地方。(顺便说一句,我也对GetDOMNode在示例中的出现感到好奇,因为它是?我想您使用FindDOMNode,尽管您对

我看了,

读到

我得到了门户的概念,你在欺骗React停止对一块DOM的渲染,然后继续渲染,这样你就可以通过使它的虚拟DOM失去同步来修补那块DOM,而不会混淆React

我的问题是,这些示例都涉及一个对话框,该对话框在页面末尾呈现,但在查看代码时显示为内联。使用jQuery模式是一个很酷的技巧,但是我需要一个jQuery日期选择器,它的div实际上保留在我放置它的地方。(顺便说一句,我也对GetDOMNode在示例中的出现感到好奇,因为它是?我想您使用FindDOMNode,尽管您对它的称呼略有不同,另外文档中还说“在大多数情况下,不鼓励使用此转义图案填充,因为它穿透了组件抽象”,这让我有点不好意思使用它。)

为了将jQuery datepicker与React隔离开来,我最初创建了一个React组件来处理datepicker之上的所有内容,另一个组件来处理datepicker之下的所有内容,并在每个组件中使用事件侦听器来侦听更新。然而,我更喜欢单亲组件的设计,它将所有东西传递给它的子组件;这似乎是一个更干净的设计

我用一个单亲重新设计了它,它似乎可以工作,但我不知道我的门户是否真的与React的虚拟DOM隔离;这是我第一次闯入入口,所以我真的混过去了。(我正在为我的导航栏使用React引导,它工作得很好;我只是找不到一个与jQuery的datepicker相当的工具,我喜欢它的外观和操作方式,这就是我坚持使用它的原因。)

这是我的顶级组件(为了清晰起见,我移除了props/componentDidMount/etc)。
将成为门户:

var ReactApp = React.createClass({

    render: function() {
        return (
            <div>
                <BootstrapNavbar division={this.state.division} dps={this.state.dps} sections={this.state.sections} />

                <div className="container">
                    <br />
                    <br />
                    <br />

                    <div className="row">
                        <div className="col-md-4" id="calendarPortal">
                            <CalendarControl />
                        </div>
                        <div className="col-md-8">
                            <h3>{this.state.dp}</h3>
                            <h4>{this.state.dpStartDate} - {this.state.dpEndDate}</h4>
                        </div>
                    </div>

                    <TimebookTableRecords timebookRecords={this.state.timebookRecs} />
                </div>
            </div>
        );
    }
});
下面是jQuery代码,它在
calendarControl
div上创建了一个日期选择器:

$("#calendarControl").datepicker({
   numberOfMonths: monthDiff,
   defaultDate: dpStartDate,
   showButtonPanel: false, 
   beforeShowDay: formatCalendarDays, //formatter function
   onSelect: dateClicked //handles click on calendar date
最终的产品似乎工作正常,并且不会产生任何“DOM意外变异”错误,比如当您操作React权限范围内的部分DOM时。我可以更新父级的状态,看到更改很好地向下传播,并使用jQuery更新日历

然而,我只是不知道这是否是正确的方法?也就是说,我在这里实现了真正的门户吗?我使用Google Chrome React Developer Tools插件来检查组件层次结构,从React的角度来看,
CalendarControl
div中似乎有一个空值:

$("#calendarControl").datepicker({
   numberOfMonths: monthDiff,
   defaultDate: dpStartDate,
   showButtonPanel: false, 
   beforeShowDay: formatCalendarDays, //formatter function
   onSelect: dateClicked //handles click on calendar date


感谢您在这篇冗长的文章中对我的支持。我不得不说,到目前为止,我真的很喜欢网络开发的React方法;它完全不同,需要大量阅读和修改才能理解它的概念,但现在它似乎比我过去的方式优雅得多。

从我对门户的理解来看,你的做法基本上是正确的。但是如果它有任何其他子项,那么在jquery之后您必须重新连接react,但我假设这里不是这样

在calendar控件中看到“null”的原因是,在CalendarControl呈现函数中返回null

为什么不将calendarControl中的渲染函数更改为:

render: function () {
   return (
         <div id="calendarControl"></div>
)
render:function(){
返回(
)

在componentDidMount函数中进行所有时髦的jQuery渲染?

这似乎是一种更好的方法,尤其是在componentDidMount中使用jQuery,因为代码都在一个地方,并且更清楚发生了什么。我还喜欢在组件中渲染calendarControl div的想法,因为它消除了需要calendarPortal部门。谢谢你回答这个问题——我刚刚得到了一个可疑的“风滚草”徽章,因为我发布了一个没有答案、浏览量很低的问题。这既有趣又尴尬。