mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Community roundup 15
This commit is contained in:
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html" class="active">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html" class="active">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html" class="active">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html" class="active">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -159,7 +159,7 @@ rails s
|
||||
<p><a href="http://skulbuny.com/2013/10/31/react-vs-angular/">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="random-tweet"></a>Random Tweet <a class="hash-link" href="#random-tweet">#</a></h2>
|
||||
<figure><blockquote class="twitter-tweet" lang="en"><p>Really intrigued by React.js. I've looked at all JS frameworks, and excepting <a href="https://twitter.com/serenadejs">@serenadejs</a> this is the first one which makes sense to me.</p>— Jonas Nicklas (@jonicklas) <a href="https://twitter.com/jonicklas/statuses/412640708755869696">December 16, 2013</a></blockquote></figure>
|
||||
<div><blockquote class="twitter-tweet" lang="en"><p>Really intrigued by React.js. I've looked at all JS frameworks, and excepting <a href="https://twitter.com/serenadejs">@serenadejs</a> this is the first one which makes sense to me.</p>— Jonas Nicklas (@jonicklas) <a href="https://twitter.com/jonicklas/statuses/412640708755869696">December 16, 2013</a></blockquote></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,236 @@
|
||||
<!DOCTYPE html>
|
||||
<!--[if IE]><![endif]-->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>React | Community Round-up #15</title>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta property="og:title" content="React | Community Round-up #15" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="http://facebook.github.io/react/blog/2014/02/05/community-roundup-15.html" />
|
||||
<meta property="og:image" content="http://facebook.github.io/react/img/logo_og.png" />
|
||||
<meta property="og:description" content="A JavaScript library for building user interfaces" />
|
||||
<meta property="fb:app_id" content="623268441017527" />
|
||||
|
||||
<link rel="shortcut icon" href="/react/favicon.ico">
|
||||
<link rel="alternate" type="application/rss+xml" title="React" href="http://facebook.github.io/react/feed.xml">
|
||||
|
||||
<link rel="stylesheet" href="/react/css/syntax.css">
|
||||
<link rel="stylesheet" href="/react/css/codemirror.css">
|
||||
<link rel="stylesheet" href="/react/css/react.css">
|
||||
|
||||
<script type="text/javascript" src="//use.typekit.net/vqa1hcx.js"></script>
|
||||
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
||||
|
||||
<!--[if lte IE 8]>
|
||||
<script type="text/javascript" src="/react/js/html5shiv.min.js"></script>
|
||||
<script type="text/javascript" src="/react/js/es5-shim.min.js"></script>
|
||||
<script type="text/javascript" src="/react/js/es5-sham.min.js"></script>
|
||||
<![endif]-->
|
||||
<script type="text/javascript" src="/react/js/codemirror.js"></script>
|
||||
<script type="text/javascript" src="/react/js/javascript.js"></script>
|
||||
<script type="text/javascript" src="/react/js/react.min.js"></script>
|
||||
<script type="text/javascript" src="/react/js/JSXTransformer.js"></script>
|
||||
<script type="text/javascript" src="/react/js/live_editor.js"></script>
|
||||
<script type="text/javascript" src="/react/js/showdown.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="nav-main">
|
||||
<div class="wrap">
|
||||
<a class="nav-home" href="/react/index.html">
|
||||
<img class="nav-logo" alt="" src="/react/img/logo_small.png" width="38" height="38">
|
||||
React
|
||||
</a>
|
||||
<ul class="nav-site">
|
||||
<li><a href="/react/docs/getting-started.html">docs</a></li>
|
||||
<li><a href="/react/support.html">support</a></li>
|
||||
<li><a href="/react/downloads.html">download</a></li>
|
||||
<li><a href="/react/blog/" class="active">blog</a></li>
|
||||
<li><a href="http://github.com/facebook/react">github</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<section class="content wrap blogContent">
|
||||
<div class="nav-docs nav-blog">
|
||||
<div class="nav-docs-section">
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html" class="active">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/12/30/community-roundup-13.html">Community Round-up #13</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/12/23/community-roundup-12.html">Community Round-up #12</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/12/19/react-v0.8.0.html">React v0.8</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/12/18/react-v0.5.2-v0.4.2.html">React v0.5.2, v0.4.2</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/11/18/community-roundup-11.html">Community Round-up #11</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/11/06/community-roundup-10.html">Community Round-up #10</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="inner-content">
|
||||
<h1>Community Round-up #15</h1>
|
||||
<p class="meta">February 5, 2014 by Jonas Gebhardt</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="post">
|
||||
<p>Interest in React seems to have surged ever since David Nolen (<a href="https://twitter.com/swannodette">@swannodette</a>)'s introduction of <a href="https://github.com/swannodette/om">Om</a> in his post <a href="http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/">"The Future of Javascript MVC Frameworks"</a>.</p>
|
||||
|
||||
<p>In this React Community Round-up, we are taking a closer look at React from a functional programming perspective.</p>
|
||||
<h2><a class="anchor" name="react-another-level-of-indirection"></a>"React: Another Level of Indirection" <a class="hash-link" href="#react-another-level-of-indirection">#</a></h2>
|
||||
<p>To start things off, Eric Normand (<a href="https://twitter.com/ericnormand">@ericnormand</a>) of <a href="http://lispcast.com">LispCast</a> makes the case for <a href="http://www.lispcast.com/react-another-level-of-indirection">React from a general functional programming standpoint</a> and explains how React's "Virtual DOM provides the last piece of the Web Frontend Puzzle for ClojureScript".</p>
|
||||
|
||||
<blockquote>
|
||||
<p>The Virtual DOM is an indirection mechanism that solves the difficult problem of DOM programming: how to deal with incremental changes to a stateful tree structure. By abstracting away the statefulness, the Virtual DOM turns the real DOM into an immediate mode GUI, which is perfect for functional programming.</p>
|
||||
|
||||
<p><a href="http://www.lispcast.com/react-another-level-of-indirection">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="reagent-minimalistic-react-for-clojurescript"></a>Reagent: Minimalistic React for ClojureScript <a class="hash-link" href="#reagent-minimalistic-react-for-clojurescript">#</a></h2>
|
||||
<p>Dan Holmsand (<a href="https://twitter.com/holmsand">@holmsand</a>) created <a href="http://holmsand.github.io/reagent/">Reagent</a>, a simplistic ClojureScript API to React.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>It allows you to define efficient React components using nothing but plain ClojureScript functions and data, that describe your UI using a Hiccup-like syntax.</p>
|
||||
|
||||
<p>The goal of Reagent is to make it possible to define arbitrarily complex UIs using just a couple of basic concepts, and to be fast enough by default that you rarely have to care about performance.</p>
|
||||
|
||||
<p><a href="http://holmsand.github.io/reagent/">Check it out on Github...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="functional-dom-programming"></a>Functional DOM programming <a class="hash-link" href="#functional-dom-programming">#</a></h2>
|
||||
<p>React's one-way data-binding naturally lends itself to a functional programming approach. Facebook's Pete Hunt (<a href="https://twitter.com/floydophone">@floydophone</a>) explores how one would go about <a href="https://medium.com/p/67d81637d43">writing web apps in a functional manner</a>. Spoiler alert:</p>
|
||||
|
||||
<blockquote>
|
||||
<p>This is React. It’s not about templates, or data binding, or DOM manipulation. It’s about using functional programming with a virtual DOM representation to build ambitious, high-performance apps with JavaScript.</p>
|
||||
|
||||
<p><a href="https://medium.com/p/67d81637d43">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
|
||||
<p>Pete also explains this in detail at his #MeteorDevShop talk (about 30 Minutes):</p>
|
||||
|
||||
<iframe width="560" height="315" src="//www.youtube.com/embed/Lqcs6hPOcFw?start=2963" frameborder="0" allowfullscreen></iframe>
|
||||
<h2><a class="anchor" name="kioo-separating-markup-and-logic"></a>Kioo: Separating markup and logic <a class="hash-link" href="#kioo-separating-markup-and-logic">#</a></h2>
|
||||
<p><a href="https://github.com/ckirkendall">Creighton Kirkendall</a> created <a href="https://github.com/ckirkendall/kioo">Kioo</a>, which adds Enlive-style templating to React. HTML templates are separated from the application logic. Kioo comes with separate examples for both Om and Reagent.</p>
|
||||
|
||||
<p>A basic example from github:</p>
|
||||
<div class="highlight"><pre><code class="html language-html" data-lang="html"><span class="cp"><!DOCTYPE html></span>
|
||||
<span class="nt"><html</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">></span>
|
||||
<span class="nt"><body></span>
|
||||
<span class="nt"><header></span>
|
||||
<span class="nt"><h1></span>Header placeholder<span class="nt"></h1></span>
|
||||
<span class="nt"><ul</span> <span class="na">id=</span><span class="s">"navigation"</span><span class="nt">></span>
|
||||
<span class="nt"><li</span> <span class="na">class=</span><span class="s">"nav-item"</span><span class="nt">><a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">></span>Placeholder<span class="nt"></a></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></header></span>
|
||||
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"content"</span><span class="nt">></span>place holder<span class="nt"></div></span>
|
||||
<span class="nt"></body></span>
|
||||
<span class="nt"></html></span>
|
||||
</code></pre></div><div class="highlight"><pre><code class="clojure language-clojure" data-lang="clojure"><span class="nv">...</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-nav-item</span> <span class="p">[[</span><span class="nv">caption</span> <span class="nv">func</span><span class="p">]]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">"main.html"</span> <span class="p">[</span><span class="ss">:.nav-item</span><span class="p">]</span>
|
||||
<span class="p">{[</span><span class="ss">:a</span><span class="p">]</span> <span class="p">(</span><span class="nf">do-></span> <span class="p">(</span><span class="nf">content</span> <span class="nv">caption</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="nf">set-attr</span> <span class="ss">:onClick</span> <span class="nv">func</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-header</span> <span class="p">[</span><span class="nv">heading</span> <span class="nv">nav-elms</span><span class="p">]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">"main.html"</span> <span class="p">[</span><span class="ss">:header</span><span class="p">]</span>
|
||||
<span class="p">{[</span><span class="ss">:h1</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="nv">heading</span><span class="p">)</span>
|
||||
<span class="p">[</span><span class="ss">:ul</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="p">(</span><span class="nb">map </span><span class="nv">my-nav-item</span> <span class="nv">nav-elms</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-page</span> <span class="p">[</span><span class="nv">data</span><span class="p">]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">"main.html"</span>
|
||||
<span class="p">{[</span><span class="ss">:header</span><span class="p">]</span> <span class="p">(</span><span class="nf">substitute</span> <span class="p">(</span><span class="nf">my-header</span> <span class="p">(</span><span class="ss">:heading</span> <span class="nv">data</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="ss">:navigation</span> <span class="nv">data</span><span class="p">)))</span>
|
||||
<span class="p">[</span><span class="ss">:.content</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="p">(</span><span class="ss">:content</span> <span class="nv">data</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="k">def </span><span class="nv">app-state</span> <span class="p">(</span><span class="nf">atom</span> <span class="p">{</span><span class="ss">:heading</span> <span class="s">"main"</span>
|
||||
<span class="ss">:content</span> <span class="s">"Hello World"</span>
|
||||
<span class="ss">:navigation</span> <span class="p">[[</span><span class="s">"home"</span> <span class="o">#</span><span class="p">(</span><span class="nf">js/alert</span> <span class="nv">%</span><span class="p">)]</span>
|
||||
<span class="p">[</span><span class="s">"next"</span> <span class="o">#</span><span class="p">(</span><span class="nf">js/alert</span> <span class="nv">%</span><span class="p">)]]}))</span>
|
||||
|
||||
<span class="p">(</span><span class="nf">om/root</span> <span class="nv">app-state</span> <span class="nv">my-page</span> <span class="p">(</span><span class="nf">.-body</span> <span class="nv">js/document</span><span class="p">))</span>
|
||||
</code></pre></div><h2><a class="anchor" name="om"></a>Om <a class="hash-link" href="#om">#</a></h2>
|
||||
<p>In an interview with David Nolen, Tom Coupland (<a href="https://twitter.com/tcoupland">@tcoupland</a>) of InfoQ provides a nice summary of recent developments around Om ("<a href="http://www.infoq.com/news/2014/01/om-react">Om: Enhancing Facebook's React with Immutability</a>").</p>
|
||||
|
||||
<blockquote>
|
||||
<p>David [Nolen]: I think people are starting to see the limitations of just JavaScript and jQuery and even more structured solutions like Backbone, Angular, Ember, etc. React is a fresh approach to the DOM problem that seems obvious in hindsight.</p>
|
||||
|
||||
<p><a href="http://www.infoq.com/news/2014/01/om-react">Read the full interview...</a></p>
|
||||
</blockquote>
|
||||
<h3><a class="anchor" name="a-slice-of-react-clojurescript-and-om"></a>A slice of React, ClojureScript and Om <a class="hash-link" href="#a-slice-of-react-clojurescript-and-om">#</a></h3>
|
||||
<p>Fredrik Dyrkell (<a href="https://twitter.com/lexicallyscoped">@lexicallyscoped</a>) rewrote part of the <a href="http://www.lexicallyscoped.com/2013/12/25/slice-of-reactjs-and-cljs.html">React tutorial in both ClojureScript and Om</a>, along with short, helpful explanations.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>React has sparked a lot of interest in the Clojure community lately [...]. At the very core, React lets you build up your DOM representation in a functional fashion by composing pure functions and you have a simple building block for everything: React components.</p>
|
||||
|
||||
<p><a href="http://www.lexicallyscoped.com/2013/12/25/slice-of-reactjs-and-cljs.html">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
|
||||
<p>In a separate post, Dyrkell breaks down <a href="http://www.lexicallyscoped.com/2014/01/23/ClojureScript-react-om-binary-clock.html">how to build a binary clock component</a> in Om.</p>
|
||||
|
||||
<p>[<a href="http://www.lexicallyscoped.com/demo/binclock/">Demo</a>] [<a href="https://github.com/fredyr/binclock/blob/master/src/binclock/core.cljs">Code</a>]</p>
|
||||
<h3><a class="anchor" name="time-travel-implementing-undo-in-om"></a>Time Travel: Implementing undo in Om <a class="hash-link" href="#time-travel-implementing-undo-in-om">#</a></h3>
|
||||
<p>David Nolen shows how to leverage immutable data structures to <a href="http://swannodette.github.io/2013/12/31/time-travel/">add global undo</a> functionality to an app – using just 13 lines of ClojureScript.</p>
|
||||
<h3><a class="anchor" name="a-step-by-step-om-walkthrough"></a>A Step-by-Step Om Walkthrough <a class="hash-link" href="#a-step-by-step-om-walkthrough">#</a></h3>
|
||||
<p><a href="http://www.joshlehman.me">Josh Lehman</a> took the time to create an extensive <a href="http://www.joshlehman.me/rewriting-the-react-tutorial-in-om/">step-by-step walkthrough</a> of the React tutorial in Om. The well-documented source is on <a href="https://github.com/jalehman/omtut-starter">github</a>.</p>
|
||||
<h3><a class="anchor" name="omkara"></a>Omkara <a class="hash-link" href="#omkara">#</a></h3>
|
||||
<p><a href="https://github.com/brendanyounger">brendanyounger</a> created <a href="https://github.com/brendanyounger/omkara">omkara</a>, a starting point for ClojureScript web apps based on Om/React. It aims to take advantage of server-side rendering and comes with a few tips on getting started with Om/React projects.</p>
|
||||
<h3><a class="anchor" name="om-experience-report"></a>Om Experience Report <a class="hash-link" href="#om-experience-report">#</a></h3>
|
||||
<p>Adam Solove (<a href="https://twitter.com/asolove/">@asolove</a>) <a href="http://adamsolove.com/js/clojure/2014/01/06/om-experience-report.html">dives a little deeper into Om, React and ClojureScript</a>. He shares some helpful tips he gathered while building his <a href="https://github.com/asolove/carto-crayon">CartoCrayon</a> prototype.</p>
|
||||
<h2><a class="anchor" name="not-so-random-tweet"></a>Not-so-random Tweet <a class="hash-link" href="#not-so-random-tweet">#</a></h2>
|
||||
<div><blockquote class="twitter-tweet" lang="en"><p>[@swannodette](https://twitter.com/swannodette) No thank you! It's honestly a bit weird because Om is exactly what I didn't know I wanted for doing functional UI work.</p>— Adam Solove (@asolove) <a href="https://twitter.com/asolove/status/420294067637858304">January 6, 2014</a></blockquote></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="fb-like" data-send="true" data-width="650" data-show-faces="false"></div>
|
||||
<div class="fb-comments" data-width="650" data-num-posts="10" data-href="http://facebook.github.io/react/blog/2014/02/05/community-roundup-15.html"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<footer class="wrap">
|
||||
<div class="left">A Facebook & Instagram collaboration.</div>
|
||||
<div class="right">© 2014 Facebook Inc.</div>
|
||||
</footer>
|
||||
</div>
|
||||
<div id="fb-root"></div>
|
||||
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-41298772-1', 'facebook.github.io');
|
||||
ga('send', 'pageview');
|
||||
|
||||
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
|
||||
|
||||
(function(d, s, id) {
|
||||
var js, fjs = d.getElementsByTagName(s)[0];
|
||||
if (d.getElementById(id)) return;
|
||||
js = d.createElement(s); js.id = id;
|
||||
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=623268441017527";
|
||||
fjs.parentNode.insertBefore(js, fjs);
|
||||
}(document, 'script', 'facebook-jssdk'));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -61,6 +61,8 @@
|
||||
<div class="inner-content">
|
||||
<h1>All Posts</h1>
|
||||
|
||||
<p><strong><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></strong> on February 5, 2014 by Jonas Gebhardt</p>
|
||||
|
||||
<p><strong><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></strong> on January 6, 2014 by Vjeux</p>
|
||||
|
||||
<p><strong><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></strong> on January 2, 2014 by Sebastian Markbåge</p>
|
||||
|
||||
+115
-53
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -90,6 +90,118 @@
|
||||
|
||||
<div class="inner-content">
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></h1>
|
||||
<p class="meta">February 5, 2014 by Jonas Gebhardt</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>Interest in React seems to have surged ever since David Nolen (<a href="https://twitter.com/swannodette">@swannodette</a>)'s introduction of <a href="https://github.com/swannodette/om">Om</a> in his post <a href="http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/">"The Future of Javascript MVC Frameworks"</a>.</p>
|
||||
|
||||
<p>In this React Community Round-up, we are taking a closer look at React from a functional programming perspective.</p>
|
||||
<h2><a class="anchor" name="react-another-level-of-indirection"></a>"React: Another Level of Indirection" <a class="hash-link" href="#react-another-level-of-indirection">#</a></h2>
|
||||
<p>To start things off, Eric Normand (<a href="https://twitter.com/ericnormand">@ericnormand</a>) of <a href="http://lispcast.com">LispCast</a> makes the case for <a href="http://www.lispcast.com/react-another-level-of-indirection">React from a general functional programming standpoint</a> and explains how React's "Virtual DOM provides the last piece of the Web Frontend Puzzle for ClojureScript".</p>
|
||||
|
||||
<blockquote>
|
||||
<p>The Virtual DOM is an indirection mechanism that solves the difficult problem of DOM programming: how to deal with incremental changes to a stateful tree structure. By abstracting away the statefulness, the Virtual DOM turns the real DOM into an immediate mode GUI, which is perfect for functional programming.</p>
|
||||
|
||||
<p><a href="http://www.lispcast.com/react-another-level-of-indirection">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="reagent-minimalistic-react-for-clojurescript"></a>Reagent: Minimalistic React for ClojureScript <a class="hash-link" href="#reagent-minimalistic-react-for-clojurescript">#</a></h2>
|
||||
<p>Dan Holmsand (<a href="https://twitter.com/holmsand">@holmsand</a>) created <a href="http://holmsand.github.io/reagent/">Reagent</a>, a simplistic ClojureScript API to React.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>It allows you to define efficient React components using nothing but plain ClojureScript functions and data, that describe your UI using a Hiccup-like syntax.</p>
|
||||
|
||||
<p>The goal of Reagent is to make it possible to define arbitrarily complex UIs using just a couple of basic concepts, and to be fast enough by default that you rarely have to care about performance.</p>
|
||||
|
||||
<p><a href="http://holmsand.github.io/reagent/">Check it out on Github...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="functional-dom-programming"></a>Functional DOM programming <a class="hash-link" href="#functional-dom-programming">#</a></h2>
|
||||
<p>React's one-way data-binding naturally lends itself to a functional programming approach. Facebook's Pete Hunt (<a href="https://twitter.com/floydophone">@floydophone</a>) explores how one would go about <a href="https://medium.com/p/67d81637d43">writing web apps in a functional manner</a>. Spoiler alert:</p>
|
||||
|
||||
<blockquote>
|
||||
<p>This is React. It’s not about templates, or data binding, or DOM manipulation. It’s about using functional programming with a virtual DOM representation to build ambitious, high-performance apps with JavaScript.</p>
|
||||
|
||||
<p><a href="https://medium.com/p/67d81637d43">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
|
||||
<p>Pete also explains this in detail at his #MeteorDevShop talk (about 30 Minutes):</p>
|
||||
|
||||
<iframe width="560" height="315" src="//www.youtube.com/embed/Lqcs6hPOcFw?start=2963" frameborder="0" allowfullscreen></iframe>
|
||||
<h2><a class="anchor" name="kioo-separating-markup-and-logic"></a>Kioo: Separating markup and logic <a class="hash-link" href="#kioo-separating-markup-and-logic">#</a></h2>
|
||||
<p><a href="https://github.com/ckirkendall">Creighton Kirkendall</a> created <a href="https://github.com/ckirkendall/kioo">Kioo</a>, which adds Enlive-style templating to React. HTML templates are separated from the application logic. Kioo comes with separate examples for both Om and Reagent.</p>
|
||||
|
||||
<p>A basic example from github:</p>
|
||||
<div class="highlight"><pre><code class="html language-html" data-lang="html"><span class="cp"><!DOCTYPE html></span>
|
||||
<span class="nt"><html</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">></span>
|
||||
<span class="nt"><body></span>
|
||||
<span class="nt"><header></span>
|
||||
<span class="nt"><h1></span>Header placeholder<span class="nt"></h1></span>
|
||||
<span class="nt"><ul</span> <span class="na">id=</span><span class="s">"navigation"</span><span class="nt">></span>
|
||||
<span class="nt"><li</span> <span class="na">class=</span><span class="s">"nav-item"</span><span class="nt">><a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">></span>Placeholder<span class="nt"></a></li></span>
|
||||
<span class="nt"></ul></span>
|
||||
<span class="nt"></header></span>
|
||||
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"content"</span><span class="nt">></span>place holder<span class="nt"></div></span>
|
||||
<span class="nt"></body></span>
|
||||
<span class="nt"></html></span>
|
||||
</code></pre></div><div class="highlight"><pre><code class="clojure language-clojure" data-lang="clojure"><span class="nv">...</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-nav-item</span> <span class="p">[[</span><span class="nv">caption</span> <span class="nv">func</span><span class="p">]]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">"main.html"</span> <span class="p">[</span><span class="ss">:.nav-item</span><span class="p">]</span>
|
||||
<span class="p">{[</span><span class="ss">:a</span><span class="p">]</span> <span class="p">(</span><span class="nf">do-></span> <span class="p">(</span><span class="nf">content</span> <span class="nv">caption</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="nf">set-attr</span> <span class="ss">:onClick</span> <span class="nv">func</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-header</span> <span class="p">[</span><span class="nv">heading</span> <span class="nv">nav-elms</span><span class="p">]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">"main.html"</span> <span class="p">[</span><span class="ss">:header</span><span class="p">]</span>
|
||||
<span class="p">{[</span><span class="ss">:h1</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="nv">heading</span><span class="p">)</span>
|
||||
<span class="p">[</span><span class="ss">:ul</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="p">(</span><span class="nb">map </span><span class="nv">my-nav-item</span> <span class="nv">nav-elms</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-page</span> <span class="p">[</span><span class="nv">data</span><span class="p">]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">"main.html"</span>
|
||||
<span class="p">{[</span><span class="ss">:header</span><span class="p">]</span> <span class="p">(</span><span class="nf">substitute</span> <span class="p">(</span><span class="nf">my-header</span> <span class="p">(</span><span class="ss">:heading</span> <span class="nv">data</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="ss">:navigation</span> <span class="nv">data</span><span class="p">)))</span>
|
||||
<span class="p">[</span><span class="ss">:.content</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="p">(</span><span class="ss">:content</span> <span class="nv">data</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="k">def </span><span class="nv">app-state</span> <span class="p">(</span><span class="nf">atom</span> <span class="p">{</span><span class="ss">:heading</span> <span class="s">"main"</span>
|
||||
<span class="ss">:content</span> <span class="s">"Hello World"</span>
|
||||
<span class="ss">:navigation</span> <span class="p">[[</span><span class="s">"home"</span> <span class="o">#</span><span class="p">(</span><span class="nf">js/alert</span> <span class="nv">%</span><span class="p">)]</span>
|
||||
<span class="p">[</span><span class="s">"next"</span> <span class="o">#</span><span class="p">(</span><span class="nf">js/alert</span> <span class="nv">%</span><span class="p">)]]}))</span>
|
||||
|
||||
<span class="p">(</span><span class="nf">om/root</span> <span class="nv">app-state</span> <span class="nv">my-page</span> <span class="p">(</span><span class="nf">.-body</span> <span class="nv">js/document</span><span class="p">))</span>
|
||||
</code></pre></div><h2><a class="anchor" name="om"></a>Om <a class="hash-link" href="#om">#</a></h2>
|
||||
<p>In an interview with David Nolen, Tom Coupland (<a href="https://twitter.com/tcoupland">@tcoupland</a>) of InfoQ provides a nice summary of recent developments around Om ("<a href="http://www.infoq.com/news/2014/01/om-react">Om: Enhancing Facebook's React with Immutability</a>").</p>
|
||||
|
||||
<blockquote>
|
||||
<p>David [Nolen]: I think people are starting to see the limitations of just JavaScript and jQuery and even more structured solutions like Backbone, Angular, Ember, etc. React is a fresh approach to the DOM problem that seems obvious in hindsight.</p>
|
||||
|
||||
<p><a href="http://www.infoq.com/news/2014/01/om-react">Read the full interview...</a></p>
|
||||
</blockquote>
|
||||
<h3><a class="anchor" name="a-slice-of-react-clojurescript-and-om"></a>A slice of React, ClojureScript and Om <a class="hash-link" href="#a-slice-of-react-clojurescript-and-om">#</a></h3>
|
||||
<p>Fredrik Dyrkell (<a href="https://twitter.com/lexicallyscoped">@lexicallyscoped</a>) rewrote part of the <a href="http://www.lexicallyscoped.com/2013/12/25/slice-of-reactjs-and-cljs.html">React tutorial in both ClojureScript and Om</a>, along with short, helpful explanations.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>React has sparked a lot of interest in the Clojure community lately [...]. At the very core, React lets you build up your DOM representation in a functional fashion by composing pure functions and you have a simple building block for everything: React components.</p>
|
||||
|
||||
<p><a href="http://www.lexicallyscoped.com/2013/12/25/slice-of-reactjs-and-cljs.html">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
|
||||
<p>In a separate post, Dyrkell breaks down <a href="http://www.lexicallyscoped.com/2014/01/23/ClojureScript-react-om-binary-clock.html">how to build a binary clock component</a> in Om.</p>
|
||||
|
||||
<p>[<a href="http://www.lexicallyscoped.com/demo/binclock/">Demo</a>] [<a href="https://github.com/fredyr/binclock/blob/master/src/binclock/core.cljs">Code</a>]</p>
|
||||
<h3><a class="anchor" name="time-travel-implementing-undo-in-om"></a>Time Travel: Implementing undo in Om <a class="hash-link" href="#time-travel-implementing-undo-in-om">#</a></h3>
|
||||
<p>David Nolen shows how to leverage immutable data structures to <a href="http://swannodette.github.io/2013/12/31/time-travel/">add global undo</a> functionality to an app – using just 13 lines of ClojureScript.</p>
|
||||
<h3><a class="anchor" name="a-step-by-step-om-walkthrough"></a>A Step-by-Step Om Walkthrough <a class="hash-link" href="#a-step-by-step-om-walkthrough">#</a></h3>
|
||||
<p><a href="http://www.joshlehman.me">Josh Lehman</a> took the time to create an extensive <a href="http://www.joshlehman.me/rewriting-the-react-tutorial-in-om/">step-by-step walkthrough</a> of the React tutorial in Om. The well-documented source is on <a href="https://github.com/jalehman/omtut-starter">github</a>.</p>
|
||||
<h3><a class="anchor" name="omkara"></a>Omkara <a class="hash-link" href="#omkara">#</a></h3>
|
||||
<p><a href="https://github.com/brendanyounger">brendanyounger</a> created <a href="https://github.com/brendanyounger/omkara">omkara</a>, a starting point for ClojureScript web apps based on Om/React. It aims to take advantage of server-side rendering and comes with a few tips on getting started with Om/React projects.</p>
|
||||
<h3><a class="anchor" name="om-experience-report"></a>Om Experience Report <a class="hash-link" href="#om-experience-report">#</a></h3>
|
||||
<p>Adam Solove (<a href="https://twitter.com/asolove/">@asolove</a>) <a href="http://adamsolove.com/js/clojure/2014/01/06/om-experience-report.html">dives a little deeper into Om, React and ClojureScript</a>. He shares some helpful tips he gathered while building his <a href="https://github.com/asolove/carto-crayon">CartoCrayon</a> prototype.</p>
|
||||
<h2><a class="anchor" name="not-so-random-tweet"></a>Not-so-random Tweet <a class="hash-link" href="#not-so-random-tweet">#</a></h2>
|
||||
<div><blockquote class="twitter-tweet" lang="en"><p>[@swannodette](https://twitter.com/swannodette) No thank you! It's honestly a bit weird because Om is exactly what I didn't know I wanted for doing functional UI work.</p>— Adam Solove (@asolove) <a href="https://twitter.com/asolove/status/420294067637858304">January 6, 2014</a></blockquote></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></h1>
|
||||
<p class="meta">January 6, 2014 by Vjeux</p>
|
||||
@@ -159,7 +271,7 @@ rails s
|
||||
<p><a href="http://skulbuny.com/2013/10/31/react-vs-angular/">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="random-tweet"></a>Random Tweet <a class="hash-link" href="#random-tweet">#</a></h2>
|
||||
<figure><blockquote class="twitter-tweet" lang="en"><p>Really intrigued by React.js. I've looked at all JS frameworks, and excepting <a href="https://twitter.com/serenadejs">@serenadejs</a> this is the first one which makes sense to me.</p>— Jonas Nicklas (@jonicklas) <a href="https://twitter.com/jonicklas/statuses/412640708755869696">December 16, 2013</a></blockquote></figure>
|
||||
<div><blockquote class="twitter-tweet" lang="en"><p>Really intrigued by React.js. I've looked at all JS frameworks, and excepting <a href="https://twitter.com/serenadejs">@serenadejs</a> this is the first one which makes sense to me.</p>— Jonas Nicklas (@jonicklas) <a href="https://twitter.com/jonicklas/statuses/412640708755869696">December 16, 2013</a></blockquote></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -364,56 +476,6 @@ componentDidUpdate: function() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/12/19/react-v0.8.0.html">React v0.8</a></h1>
|
||||
<p class="meta">December 19, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>I'll start by answering the obvious question:</p>
|
||||
|
||||
<blockquote>
|
||||
<p>What happened to 0.6 and 0.7?</p>
|
||||
</blockquote>
|
||||
|
||||
<p>It's become increasingly obvious since our launch in May that people want to use React on the server. With the server-side rendering abilities, that's a perfect fit. However using the same copy of React on the server and then packaging it up for the client is surprisingly a harder problem. People have been using our <code>react-tools</code> module which includes React, but when browserifying that ends up packaging all of <code>esprima</code> and some other dependencies that aren't needed on the client. So we wanted to make this whole experience better.</p>
|
||||
|
||||
<p>We talked with <a href="https://github.com/jeffbski">Jeff Barczewski</a> who was the owner of the <code>react</code> module on npm. He was kind enough to transition ownership to us and release his package under a different name: <code>autoflow</code>. I encourage you to <a href="https://github.com/jeffbski/autoflow">check it out</a> if you're writing a lot of asynchronous code. In order to not break all of <code>react</code>'s current users of 0.7.x, we decided to bump our version to 0.8 and skip the issue entirely. We're also including a warning if you use our <code>react</code> module like you would use the previous package.</p>
|
||||
|
||||
<p>In order to make the transition to 0.8 for our current users as painless as possible, we decided to make 0.8 primarily a bug fix release on top of 0.5. No public APIs were changed (even if they were already marked as deprecated). We haven't added any of the new features we have in master, though we did take the opportunity to pull in some improvements to internals.</p>
|
||||
|
||||
<p>We hope that by releasing <code>react</code> on npm, we will enable a new set of uses that have been otherwise difficult. All feedback is welcome!</p>
|
||||
<h2><a class="anchor" name="changelog"></a>Changelog <a class="hash-link" href="#changelog">#</a></h2><h3><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h3>
|
||||
<ul>
|
||||
<li>Added support for more attributes:
|
||||
|
||||
<ul>
|
||||
<li><code>rows</code> & <code>cols</code> for <code><textarea></code></li>
|
||||
<li><code>defer</code> & <code>async</code> for <code><script></code></li>
|
||||
<li><code>loop</code> for <code><audio></code> & <code><video></code></li>
|
||||
<li><code>autoCorrect</code> for form fields (a non-standard attribute only supported by mobile WebKit)</li>
|
||||
</ul></li>
|
||||
<li>Improved error messages</li>
|
||||
<li>Fixed Selection events in IE11</li>
|
||||
<li>Added <code>onContextMenu</code> events</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-with-addons"></a>React with Addons <a class="hash-link" href="#react-with-addons">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bugs with TransitionGroup when children were undefined</li>
|
||||
<li>Added support for <code>onTransition</code></li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-tools"></a>react-tools <a class="hash-link" href="#react-tools">#</a></h3>
|
||||
<ul>
|
||||
<li>Upgraded <code>jstransform</code> and <code>esprima-fb</code></li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="jsxtransformer"></a>JSXTransformer <a class="hash-link" href="#jsxtransformer">#</a></h3>
|
||||
<ul>
|
||||
<li>Added support for use in IE8</li>
|
||||
<li>Upgraded browserify, which reduced file size by ~65KB (16KB gzipped)</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
|
||||
|
||||
+52
-23
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -90,6 +90,56 @@
|
||||
|
||||
<div class="inner-content">
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/12/19/react-v0.8.0.html">React v0.8</a></h1>
|
||||
<p class="meta">December 19, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>I'll start by answering the obvious question:</p>
|
||||
|
||||
<blockquote>
|
||||
<p>What happened to 0.6 and 0.7?</p>
|
||||
</blockquote>
|
||||
|
||||
<p>It's become increasingly obvious since our launch in May that people want to use React on the server. With the server-side rendering abilities, that's a perfect fit. However using the same copy of React on the server and then packaging it up for the client is surprisingly a harder problem. People have been using our <code>react-tools</code> module which includes React, but when browserifying that ends up packaging all of <code>esprima</code> and some other dependencies that aren't needed on the client. So we wanted to make this whole experience better.</p>
|
||||
|
||||
<p>We talked with <a href="https://github.com/jeffbski">Jeff Barczewski</a> who was the owner of the <code>react</code> module on npm. He was kind enough to transition ownership to us and release his package under a different name: <code>autoflow</code>. I encourage you to <a href="https://github.com/jeffbski/autoflow">check it out</a> if you're writing a lot of asynchronous code. In order to not break all of <code>react</code>'s current users of 0.7.x, we decided to bump our version to 0.8 and skip the issue entirely. We're also including a warning if you use our <code>react</code> module like you would use the previous package.</p>
|
||||
|
||||
<p>In order to make the transition to 0.8 for our current users as painless as possible, we decided to make 0.8 primarily a bug fix release on top of 0.5. No public APIs were changed (even if they were already marked as deprecated). We haven't added any of the new features we have in master, though we did take the opportunity to pull in some improvements to internals.</p>
|
||||
|
||||
<p>We hope that by releasing <code>react</code> on npm, we will enable a new set of uses that have been otherwise difficult. All feedback is welcome!</p>
|
||||
<h2><a class="anchor" name="changelog"></a>Changelog <a class="hash-link" href="#changelog">#</a></h2><h3><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h3>
|
||||
<ul>
|
||||
<li>Added support for more attributes:
|
||||
|
||||
<ul>
|
||||
<li><code>rows</code> & <code>cols</code> for <code><textarea></code></li>
|
||||
<li><code>defer</code> & <code>async</code> for <code><script></code></li>
|
||||
<li><code>loop</code> for <code><audio></code> & <code><video></code></li>
|
||||
<li><code>autoCorrect</code> for form fields (a non-standard attribute only supported by mobile WebKit)</li>
|
||||
</ul></li>
|
||||
<li>Improved error messages</li>
|
||||
<li>Fixed Selection events in IE11</li>
|
||||
<li>Added <code>onContextMenu</code> events</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-with-addons"></a>React with Addons <a class="hash-link" href="#react-with-addons">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bugs with TransitionGroup when children were undefined</li>
|
||||
<li>Added support for <code>onTransition</code></li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-tools"></a>react-tools <a class="hash-link" href="#react-tools">#</a></h3>
|
||||
<ul>
|
||||
<li>Upgraded <code>jstransform</code> and <code>esprima-fb</code></li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="jsxtransformer"></a>JSXTransformer <a class="hash-link" href="#jsxtransformer">#</a></h3>
|
||||
<ul>
|
||||
<li>Added support for use in IE8</li>
|
||||
<li>Upgraded browserify, which reduced file size by ~65KB (16KB gzipped)</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/12/18/react-v0.5.2-v0.4.2.html">React v0.5.2, v0.4.2</a></h1>
|
||||
<p class="meta">December 18, 2013 by Paul O'Shannessy</p>
|
||||
@@ -452,27 +502,6 @@ Is this some sort of template language? Specifically no. This might have been th
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></h1>
|
||||
<p class="meta">October 29, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>This release focuses on fixing some small bugs that have been uncovered over the past two weeks. I would like to thank everybody involved, specifically members of the community who fixed half of the issues found. Thanks to <a href="https://github.com/spicyj">Ben Alpert</a>, <a href="https://github.com/andreypopp">Andrey Popp</a>, and <a href="https://github.com/lrowe">Laurence Rowe</a> for their contributions!</p>
|
||||
<h2><a class="anchor" name="changelog"></a>Changelog <a class="hash-link" href="#changelog">#</a></h2><h3><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bug with <code><input type="range"></code> and selection events.</li>
|
||||
<li>Fixed bug with selection and focus.</li>
|
||||
<li>Made it possible to unmount components from the document root.</li>
|
||||
<li>Fixed bug for <code>disabled</code> attribute handling on non-<code><input></code> elements.</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-with-addons"></a>React with Addons <a class="hash-link" href="#react-with-addons">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bug with transition and animation event detection.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
|
||||
|
||||
+23
-44
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -90,6 +90,27 @@
|
||||
|
||||
<div class="inner-content">
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></h1>
|
||||
<p class="meta">October 29, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>This release focuses on fixing some small bugs that have been uncovered over the past two weeks. I would like to thank everybody involved, specifically members of the community who fixed half of the issues found. Thanks to <a href="https://github.com/spicyj">Ben Alpert</a>, <a href="https://github.com/andreypopp">Andrey Popp</a>, and <a href="https://github.com/lrowe">Laurence Rowe</a> for their contributions!</p>
|
||||
<h2><a class="anchor" name="changelog"></a>Changelog <a class="hash-link" href="#changelog">#</a></h2><h3><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bug with <code><input type="range"></code> and selection events.</li>
|
||||
<li>Fixed bug with selection and focus.</li>
|
||||
<li>Made it possible to unmount components from the document root.</li>
|
||||
<li>Fixed bug for <code>disabled</code> attribute handling on non-<code><input></code> elements.</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-with-addons"></a>React with Addons <a class="hash-link" href="#react-with-addons">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bug with transition and animation event detection.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/10/16/react-v0.5.0.html">React v0.5</a></h1>
|
||||
<p class="meta">October 16, 2013 by Paul O'Shannessy</p>
|
||||
@@ -370,48 +391,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/08/19/use-react-and-jsx-in-python-applications.html">Use React and JSX in Python Applications</a></h1>
|
||||
<p class="meta">August 19, 2013 by Kunal Mehta</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>Today we're happy to announce the initial release of <a href="https://github.com/facebook/react-python">PyReact</a>, which makes it easier to use React and JSX in your Python applications. It's designed to provide an API to transform your JSX files into JavaScript, as well as provide access to the latest React source files.</p>
|
||||
<h2><a class="anchor" name="usage"></a>Usage <a class="hash-link" href="#usage">#</a></h2>
|
||||
<p>Transform your JSX files via the provided <code>jsx</code> module:</p>
|
||||
<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="kn">from</span> <span class="nn">react</span> <span class="kn">import</span> <span class="n">jsx</span>
|
||||
|
||||
<span class="c"># For multiple paths, use the JSXTransformer class.</span>
|
||||
<span class="n">transformer</span> <span class="o">=</span> <span class="n">jsx</span><span class="o">.</span><span class="n">JSXTransformer</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">jsx_path</span><span class="p">,</span> <span class="n">js_path</span> <span class="ow">in</span> <span class="n">my_paths</span><span class="p">:</span>
|
||||
<span class="n">transformer</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">jsx_path</span><span class="p">,</span> <span class="n">js_path</span><span class="p">)</span>
|
||||
|
||||
<span class="c"># For a single file, you can use a shortcut method.</span>
|
||||
<span class="n">jsx</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="s">'path/to/input/file.jsx'</span><span class="p">,</span> <span class="s">'path/to/output/file.js'</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
<p>For full paths to React files, use the <code>source</code> module:</p>
|
||||
<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="kn">from</span> <span class="nn">react</span> <span class="kn">import</span> <span class="n">source</span>
|
||||
|
||||
<span class="c"># path_for raises IOError if the file doesn't exist.</span>
|
||||
<span class="n">react_js</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">path_for</span><span class="p">(</span><span class="s">'react.min.js'</span><span class="p">)</span>
|
||||
</code></pre></div><h2><a class="anchor" name="django"></a>Django <a class="hash-link" href="#django">#</a></h2>
|
||||
<p>PyReact includes a JSX compiler for <a href="https://github.com/cyberdelia/django-pipeline">django-pipeline</a>. Add it to your project's pipeline settings like this:</p>
|
||||
<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="n">PIPELINE_COMPILERS</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s">'react.utils.pipeline.JSXCompiler'</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
</code></pre></div><h2><a class="anchor" name="installation"></a>Installation <a class="hash-link" href="#installation">#</a></h2>
|
||||
<p>PyReact is hosted on PyPI, and can be installed with <code>pip</code>:</p>
|
||||
<div class="highlight"><pre><code class="text language-text" data-lang="text">$ pip install PyReact
|
||||
</code></pre></div>
|
||||
<p>Alternatively, add it into your <code>requirements</code> file:</p>
|
||||
<div class="highlight"><pre><code class="text language-text" data-lang="text">PyReact==0.1.1
|
||||
</code></pre></div>
|
||||
<p><strong>Dependencies</strong>: PyReact uses <a href="https://github.com/doloopwhile/PyExecJS">PyExecJS</a> to execute the bundled React code, which requires that a JS runtime environment is installed on your machine. We don't explicitly set a dependency on a runtime environment; Mac OS X comes bundled with one. If you're on a different platform, we recommend <a href="https://code.google.com/p/pyv8/">PyV8</a>.</p>
|
||||
|
||||
<p>For the initial release, we've only tested on Python 2.7. Look out for support for Python 3 in the future, and if you see anything that can be improved, we welcome your <a href="https://github.com/facebook/react-python/blob/master/CONTRIBUTING.md">contributions</a>!</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
|
||||
|
||||
+44
-43
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -90,6 +90,48 @@
|
||||
|
||||
<div class="inner-content">
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/08/19/use-react-and-jsx-in-python-applications.html">Use React and JSX in Python Applications</a></h1>
|
||||
<p class="meta">August 19, 2013 by Kunal Mehta</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>Today we're happy to announce the initial release of <a href="https://github.com/facebook/react-python">PyReact</a>, which makes it easier to use React and JSX in your Python applications. It's designed to provide an API to transform your JSX files into JavaScript, as well as provide access to the latest React source files.</p>
|
||||
<h2><a class="anchor" name="usage"></a>Usage <a class="hash-link" href="#usage">#</a></h2>
|
||||
<p>Transform your JSX files via the provided <code>jsx</code> module:</p>
|
||||
<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="kn">from</span> <span class="nn">react</span> <span class="kn">import</span> <span class="n">jsx</span>
|
||||
|
||||
<span class="c"># For multiple paths, use the JSXTransformer class.</span>
|
||||
<span class="n">transformer</span> <span class="o">=</span> <span class="n">jsx</span><span class="o">.</span><span class="n">JSXTransformer</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">jsx_path</span><span class="p">,</span> <span class="n">js_path</span> <span class="ow">in</span> <span class="n">my_paths</span><span class="p">:</span>
|
||||
<span class="n">transformer</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">jsx_path</span><span class="p">,</span> <span class="n">js_path</span><span class="p">)</span>
|
||||
|
||||
<span class="c"># For a single file, you can use a shortcut method.</span>
|
||||
<span class="n">jsx</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="s">'path/to/input/file.jsx'</span><span class="p">,</span> <span class="s">'path/to/output/file.js'</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
<p>For full paths to React files, use the <code>source</code> module:</p>
|
||||
<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="kn">from</span> <span class="nn">react</span> <span class="kn">import</span> <span class="n">source</span>
|
||||
|
||||
<span class="c"># path_for raises IOError if the file doesn't exist.</span>
|
||||
<span class="n">react_js</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">path_for</span><span class="p">(</span><span class="s">'react.min.js'</span><span class="p">)</span>
|
||||
</code></pre></div><h2><a class="anchor" name="django"></a>Django <a class="hash-link" href="#django">#</a></h2>
|
||||
<p>PyReact includes a JSX compiler for <a href="https://github.com/cyberdelia/django-pipeline">django-pipeline</a>. Add it to your project's pipeline settings like this:</p>
|
||||
<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="n">PIPELINE_COMPILERS</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s">'react.utils.pipeline.JSXCompiler'</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
</code></pre></div><h2><a class="anchor" name="installation"></a>Installation <a class="hash-link" href="#installation">#</a></h2>
|
||||
<p>PyReact is hosted on PyPI, and can be installed with <code>pip</code>:</p>
|
||||
<div class="highlight"><pre><code class="text language-text" data-lang="text">$ pip install PyReact
|
||||
</code></pre></div>
|
||||
<p>Alternatively, add it into your <code>requirements</code> file:</p>
|
||||
<div class="highlight"><pre><code class="text language-text" data-lang="text">PyReact==0.1.1
|
||||
</code></pre></div>
|
||||
<p><strong>Dependencies</strong>: PyReact uses <a href="https://github.com/doloopwhile/PyExecJS">PyExecJS</a> to execute the bundled React code, which requires that a JS runtime environment is installed on your machine. We don't explicitly set a dependency on a runtime environment; Mac OS X comes bundled with one. If you're on a different platform, we recommend <a href="https://code.google.com/p/pyv8/">PyV8</a>.</p>
|
||||
|
||||
<p>For the initial release, we've only tested on Python 2.7. Look out for support for Python 3 in the future, and if you see anything that can be improved, we welcome your <a href="https://github.com/facebook/react-python/blob/master/CONTRIBUTING.md">contributions</a>!</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/08/05/community-roundup-6.html">Community Round-up #6</a></h1>
|
||||
<p class="meta">August 5, 2013 by Vjeux</p>
|
||||
@@ -322,47 +364,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/07/17/react-v0-4-0.html">React v0.4.0</a></h1>
|
||||
<p class="meta">July 17, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>Over the past 2 months we've been taking feedback and working hard to make React even better. We fixed some bugs, made some under-the-hood improvements, and added several features that we think will improve the experience developing with React. Today we're proud to announce the availability of React v0.4!</p>
|
||||
|
||||
<p>This release could not have happened without the support of our growing community. Since launch day, the community has contributed blog posts, questions to the <a href="http://groups.google.com/group/reactjs">Google Group</a>, and issues and pull requests on GitHub. We've had contributions ranging from documentation improvements to major changes to React's rendering. We've seen people integrate React into the tools they're using and the products they're building, and we're all very excited to see what our budding community builds next!</p>
|
||||
|
||||
<p>React v0.4 has some big changes. We've also restructured the documentation to better communicate how to use React. We've summarized the changes below and linked to documentation where we think it will be especially useful.</p>
|
||||
|
||||
<p>When you're ready, <a href="/react/downloads.html">go download it</a>!</p>
|
||||
<h3><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h3>
|
||||
<ul>
|
||||
<li>Switch from using <code>id</code> attribute to <code>data-reactid</code> to track DOM nodes. This allows you to integrate with other JS and CSS libraries more easily.</li>
|
||||
<li>Support for more DOM elements and attributes (e.g., <code><canvas></code>)</li>
|
||||
<li>Improved server-side rendering APIs. <code>React.renderComponentToString(<component>, callback)</code> allows you to use React on the server and generate markup which can be sent down to the browser.</li>
|
||||
<li><code>prop</code> improvements: validation and default values. <a href="http://facebook.github.io/react/blog/2013/07/11/react-v0-4-prop-validation-and-default-values.html">Read our blog post for details...</a></li>
|
||||
<li>Support for the <code>key</code> prop, which allows for finer control over reconciliation. <a href="http://facebook.github.io/react/docs/multiple-components.html">Read the docs for details...</a></li>
|
||||
<li>Removed <code>React.autoBind</code>. <a href="http://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html">Read our blog post for details...</a></li>
|
||||
<li>Improvements to forms. We've written wrappers around <code><input></code>, <code><textarea></code>, <code><option></code>, and <code><select></code> in order to standardize many inconsistencies in browser implementations. This includes support for <code>defaultValue</code>, and improved implementation of the <code>onChange</code> event, and circuit completion. <a href="http://facebook.github.io/react/docs/forms.html">Read the docs for details...</a></li>
|
||||
<li>We've implemented an improved synthetic event system that conforms to the W3C spec.</li>
|
||||
<li>Updates to your component are batched now, which may result in a significantly faster re-render of components. <code>this.setState</code> now takes an optional callback as its second parameter. If you were using <code>onClick={this.setState.bind(this, state)}</code> previously, you'll want to make sure you add a third parameter so that the event is not treated as the callback.</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="jsx"></a>JSX <a class="hash-link" href="#jsx">#</a></h3>
|
||||
<ul>
|
||||
<li>Support for comment nodes <code><div>{/* this is a comment and won't be rendered */}</div></code></li>
|
||||
<li>Children are now transformed directly into arguments instead of being wrapped in an array
|
||||
E.g. <code><div><Component1/><Component2/></div></code> is transformed into <code>React.DOM.div(null, Component1(null), Component2(null))</code>.
|
||||
Previously this would be transformed into <code>React.DOM.div(null, [Component1(null), Component2(null)])</code>.
|
||||
If you were using React without JSX previously, your code should still work.</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-tools"></a>react-tools <a class="hash-link" href="#react-tools">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed a number of bugs when transforming directories</li>
|
||||
<li>No longer re-write <code>require()</code>s to be relative unless specified</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
|
||||
|
||||
+43
-26
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -90,6 +90,47 @@
|
||||
|
||||
<div class="inner-content">
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/07/17/react-v0-4-0.html">React v0.4.0</a></h1>
|
||||
<p class="meta">July 17, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>Over the past 2 months we've been taking feedback and working hard to make React even better. We fixed some bugs, made some under-the-hood improvements, and added several features that we think will improve the experience developing with React. Today we're proud to announce the availability of React v0.4!</p>
|
||||
|
||||
<p>This release could not have happened without the support of our growing community. Since launch day, the community has contributed blog posts, questions to the <a href="http://groups.google.com/group/reactjs">Google Group</a>, and issues and pull requests on GitHub. We've had contributions ranging from documentation improvements to major changes to React's rendering. We've seen people integrate React into the tools they're using and the products they're building, and we're all very excited to see what our budding community builds next!</p>
|
||||
|
||||
<p>React v0.4 has some big changes. We've also restructured the documentation to better communicate how to use React. We've summarized the changes below and linked to documentation where we think it will be especially useful.</p>
|
||||
|
||||
<p>When you're ready, <a href="/react/downloads.html">go download it</a>!</p>
|
||||
<h3><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h3>
|
||||
<ul>
|
||||
<li>Switch from using <code>id</code> attribute to <code>data-reactid</code> to track DOM nodes. This allows you to integrate with other JS and CSS libraries more easily.</li>
|
||||
<li>Support for more DOM elements and attributes (e.g., <code><canvas></code>)</li>
|
||||
<li>Improved server-side rendering APIs. <code>React.renderComponentToString(<component>, callback)</code> allows you to use React on the server and generate markup which can be sent down to the browser.</li>
|
||||
<li><code>prop</code> improvements: validation and default values. <a href="http://facebook.github.io/react/blog/2013/07/11/react-v0-4-prop-validation-and-default-values.html">Read our blog post for details...</a></li>
|
||||
<li>Support for the <code>key</code> prop, which allows for finer control over reconciliation. <a href="http://facebook.github.io/react/docs/multiple-components.html">Read the docs for details...</a></li>
|
||||
<li>Removed <code>React.autoBind</code>. <a href="http://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html">Read our blog post for details...</a></li>
|
||||
<li>Improvements to forms. We've written wrappers around <code><input></code>, <code><textarea></code>, <code><option></code>, and <code><select></code> in order to standardize many inconsistencies in browser implementations. This includes support for <code>defaultValue</code>, and improved implementation of the <code>onChange</code> event, and circuit completion. <a href="http://facebook.github.io/react/docs/forms.html">Read the docs for details...</a></li>
|
||||
<li>We've implemented an improved synthetic event system that conforms to the W3C spec.</li>
|
||||
<li>Updates to your component are batched now, which may result in a significantly faster re-render of components. <code>this.setState</code> now takes an optional callback as its second parameter. If you were using <code>onClick={this.setState.bind(this, state)}</code> previously, you'll want to make sure you add a third parameter so that the event is not treated as the callback.</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="jsx"></a>JSX <a class="hash-link" href="#jsx">#</a></h3>
|
||||
<ul>
|
||||
<li>Support for comment nodes <code><div>{/* this is a comment and won't be rendered */}</div></code></li>
|
||||
<li>Children are now transformed directly into arguments instead of being wrapped in an array
|
||||
E.g. <code><div><Component1/><Component2/></div></code> is transformed into <code>React.DOM.div(null, Component1(null), Component2(null))</code>.
|
||||
Previously this would be transformed into <code>React.DOM.div(null, [Component1(null), Component2(null)])</code>.
|
||||
If you were using React without JSX previously, your code should still work.</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-tools"></a>react-tools <a class="hash-link" href="#react-tools">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed a number of bugs when transforming directories</li>
|
||||
<li>No longer re-write <code>require()</code>s to be relative unless specified</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/07/11/react-v0-4-prop-validation-and-default-values.html">New in React v0.4: Prop Validation and Default Values</a></h1>
|
||||
<p class="meta">July 11, 2013 by Paul O'Shannessy</p>
|
||||
@@ -333,30 +374,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/06/21/react-v0-3-3.html">React v0.3.3</a></h1>
|
||||
<p class="meta">June 21, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>We have a ton of great stuff coming in v0.4, but in the meantime we're releasing v0.3.3. This release addresses some small issues people were having and simplifies our tools to make them easier to use.</p>
|
||||
<h2><a class="anchor" name="react-tools"></a>react-tools <a class="hash-link" href="#react-tools">#</a></h2>
|
||||
<ul>
|
||||
<li>Upgrade Commoner so <code>require</code> statements are no longer relativized when passing through the transformer. This was a feature needed when building React, but doesn't translate well for other consumers of <code>bin/jsx</code>.</li>
|
||||
<li>Upgraded our dependencies on Commoner and Recast so they use a different directory for their cache.</li>
|
||||
<li>Freeze our esprima dependency.</li>
|
||||
</ul>
|
||||
<h2><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h2>
|
||||
<ul>
|
||||
<li>Allow reusing the same DOM node to render different components. e.g. <code>React.renderComponent(<div/>, domNode); React.renderComponent(<span/>, domNode);</code> will work now.</li>
|
||||
</ul>
|
||||
<h2><a class="anchor" name="jsxtransformer"></a>JSXTransformer <a class="hash-link" href="#jsxtransformer">#</a></h2>
|
||||
<ul>
|
||||
<li>Improved the in-browser transformer so that transformed scripts will execute in the expected scope. The allows components to be defined and used from separate files.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
|
||||
|
||||
+26
-2
@@ -63,6 +63,8 @@
|
||||
<h3>Recent posts</h3>
|
||||
<ul>
|
||||
|
||||
<li><a href="/react/blog/2014/02/05/community-roundup-15.html">Community Round-up #15</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/06/community-roundup-14.html">Community Round-up #14</a></li>
|
||||
|
||||
<li><a href="/react/blog/2014/01/02/react-chrome-developer-tools.html">React Chrome Developer Tools</a></li>
|
||||
@@ -81,8 +83,6 @@
|
||||
|
||||
<li><a href="/react/blog/2013/11/05/thinking-in-react.html">Thinking in React</a></li>
|
||||
|
||||
<li><a href="/react/blog/2013/10/29/react-v0-5-1.html">React v0.5.1</a></li>
|
||||
|
||||
<li><a href="/react/blog/all.html">All posts ...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -90,6 +90,30 @@
|
||||
|
||||
<div class="inner-content">
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/06/21/react-v0-3-3.html">React v0.3.3</a></h1>
|
||||
<p class="meta">June 21, 2013 by Paul O'Shannessy</p>
|
||||
<hr />
|
||||
<div class="post">
|
||||
<p>We have a ton of great stuff coming in v0.4, but in the meantime we're releasing v0.3.3. This release addresses some small issues people were having and simplifies our tools to make them easier to use.</p>
|
||||
<h2><a class="anchor" name="react-tools"></a>react-tools <a class="hash-link" href="#react-tools">#</a></h2>
|
||||
<ul>
|
||||
<li>Upgrade Commoner so <code>require</code> statements are no longer relativized when passing through the transformer. This was a feature needed when building React, but doesn't translate well for other consumers of <code>bin/jsx</code>.</li>
|
||||
<li>Upgraded our dependencies on Commoner and Recast so they use a different directory for their cache.</li>
|
||||
<li>Freeze our esprima dependency.</li>
|
||||
</ul>
|
||||
<h2><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h2>
|
||||
<ul>
|
||||
<li>Allow reusing the same DOM node to render different components. e.g. <code>React.renderComponent(<div/>, domNode); React.renderComponent(<span/>, domNode);</code> will work now.</li>
|
||||
</ul>
|
||||
<h2><a class="anchor" name="jsxtransformer"></a>JSXTransformer <a class="hash-link" href="#jsxtransformer">#</a></h2>
|
||||
<ul>
|
||||
<li>Improved the in-browser transformer so that transformed scripts will execute in the expected scope. The allows components to be defined and used from separate files.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-list-item">
|
||||
<h1><a href="/react/blog/2013/06/19/community-roundup-2.html">Community Round-up #2</a></h1>
|
||||
<p class="meta">June 19, 2013 by Vjeux</p>
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -369,7 +369,7 @@
|
||||
<div class="subHeader"></div>
|
||||
<p>When designing interfaces, break down the common design elements (buttons, form fields, layout components, etc) into reusable components with well-defined interfaces. That way, the next time you need to build some UI you can write much less code, which means faster development time, less bugs, and less bytes down the wire.</p>
|
||||
<h2><a class="anchor" name="prop-validation"></a>Prop Validation <a class="hash-link" href="#prop-validation">#</a></h2>
|
||||
<p>As your app grows it's helpful to ensure that your components are used correctly. We do this by allowing you to specify <code>propTypes</code>. <code>React.PropTypes</code> exports a range of validators that can be used to make sure the data you receive is valid. When an invalid value is provided for a prop, a warning will be shown in the JavaScript console. Note that for performance reasons <code>propTypes</code> is only checked in development mode. Here is an example documenting the different validators provided:</p>
|
||||
<p>As your app grows it's helpful to ensure that your components are used correctly. We do this by allowing you to specify <code>propTypes</code>. <code>React.PropTypes</code> exports a range of validators that can be used to make sure the data you receive is valid. When an invalid value is provided for a prop, an error will be thrown. Here is an example documenting the different validators provided:</p>
|
||||
<div class="highlight"><pre><code class="javascript language-javascript" data-lang="javascript"><span class="nx">React</span><span class="p">.</span><span class="nx">createClass</span><span class="p">({</span>
|
||||
<span class="nx">propTypes</span><span class="o">:</span> <span class="p">{</span>
|
||||
<span class="c1">// You can declare that a prop is a specific JS primitive. By default, these</span>
|
||||
@@ -389,14 +389,14 @@
|
||||
<span class="c1">// JS's instanceof operator.</span>
|
||||
<span class="nx">someClass</span><span class="o">:</span> <span class="nx">React</span><span class="p">.</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">instanceOf</span><span class="p">(</span><span class="nx">SomeClass</span><span class="p">),</span>
|
||||
|
||||
<span class="c1">// You can chain any of the above with isRequired to make sure a warning is</span>
|
||||
<span class="c1">// shown if the prop isn't provided.</span>
|
||||
<span class="c1">// You can chain any of the above with isRequired to make sure an error is</span>
|
||||
<span class="c1">// thrown if the prop isn't provided.</span>
|
||||
<span class="nx">requiredFunc</span><span class="o">:</span> <span class="nx">React</span><span class="p">.</span><span class="nx">PropTypes</span><span class="p">.</span><span class="nx">func</span><span class="p">.</span><span class="nx">isRequired</span>
|
||||
|
||||
<span class="c1">// You can also specify a custom validator.</span>
|
||||
<span class="nx">customProp</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">props</span><span class="p">,</span> <span class="nx">propName</span><span class="p">,</span> <span class="nx">componentName</span><span class="p">)</span> <span class="p">{</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="sr">/matchme/</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">props</span><span class="p">[</span><span class="nx">propName</span><span class="p">]))</span> <span class="p">{</span>
|
||||
<span class="nx">console</span><span class="p">.</span><span class="nx">warn</span><span class="p">(</span><span class="s1">'Validation failed!'</span><span class="p">);</span>
|
||||
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'Validation failed!'</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">},</span>
|
||||
|
||||
@@ -6,6 +6,117 @@
|
||||
<link>http://facebook.github.io/react</link>
|
||||
<atom:link href="http://facebook.github.io/react/feed.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
<item>
|
||||
<title>Community Round-up #15</title>
|
||||
<description><p>Interest in React seems to have surged ever since David Nolen (<a href="https://twitter.com/swannodette">@swannodette</a>)&#39;s introduction of <a href="https://github.com/swannodette/om">Om</a> in his post <a href="http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/">&quot;The Future of Javascript MVC Frameworks&quot;</a>.</p>
|
||||
|
||||
<p>In this React Community Round-up, we are taking a closer look at React from a functional programming perspective.</p>
|
||||
<h2><a class="anchor" name="react-another-level-of-indirection"></a>&quot;React: Another Level of Indirection&quot; <a class="hash-link" href="#react-another-level-of-indirection">#</a></h2>
|
||||
<p>To start things off, Eric Normand (<a href="https://twitter.com/ericnormand">@ericnormand</a>) of <a href="http://lispcast.com">LispCast</a> makes the case for <a href="http://www.lispcast.com/react-another-level-of-indirection">React from a general functional programming standpoint</a> and explains how React&#39;s &quot;Virtual DOM provides the last piece of the Web Frontend Puzzle for ClojureScript&quot;.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>The Virtual DOM is an indirection mechanism that solves the difficult problem of DOM programming: how to deal with incremental changes to a stateful tree structure. By abstracting away the statefulness, the Virtual DOM turns the real DOM into an immediate mode GUI, which is perfect for functional programming.</p>
|
||||
|
||||
<p><a href="http://www.lispcast.com/react-another-level-of-indirection">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="reagent-minimalistic-react-for-clojurescript"></a>Reagent: Minimalistic React for ClojureScript <a class="hash-link" href="#reagent-minimalistic-react-for-clojurescript">#</a></h2>
|
||||
<p>Dan Holmsand (<a href="https://twitter.com/holmsand">@holmsand</a>) created <a href="http://holmsand.github.io/reagent/">Reagent</a>, a simplistic ClojureScript API to React.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>It allows you to define efficient React components using nothing but plain ClojureScript functions and data, that describe your UI using a Hiccup-like syntax.</p>
|
||||
|
||||
<p>The goal of Reagent is to make it possible to define arbitrarily complex UIs using just a couple of basic concepts, and to be fast enough by default that you rarely have to care about performance.</p>
|
||||
|
||||
<p><a href="http://holmsand.github.io/reagent/">Check it out on Github...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="functional-dom-programming"></a>Functional DOM programming <a class="hash-link" href="#functional-dom-programming">#</a></h2>
|
||||
<p>React&#39;s one-way data-binding naturally lends itself to a functional programming approach. Facebook&#39;s Pete Hunt (<a href="https://twitter.com/floydophone">@floydophone</a>) explores how one would go about <a href="https://medium.com/p/67d81637d43">writing web apps in a functional manner</a>. Spoiler alert:</p>
|
||||
|
||||
<blockquote>
|
||||
<p>This is React. It’s not about templates, or data binding, or DOM manipulation. It’s about using functional programming with a virtual DOM representation to build ambitious, high-performance apps with JavaScript.</p>
|
||||
|
||||
<p><a href="https://medium.com/p/67d81637d43">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
|
||||
<p>Pete also explains this in detail at his #MeteorDevShop talk (about 30 Minutes):</p>
|
||||
|
||||
<iframe width="560" height="315" src="//www.youtube.com/embed/Lqcs6hPOcFw?start=2963" frameborder="0" allowfullscreen></iframe>
|
||||
<h2><a class="anchor" name="kioo-separating-markup-and-logic"></a>Kioo: Separating markup and logic <a class="hash-link" href="#kioo-separating-markup-and-logic">#</a></h2>
|
||||
<p><a href="https://github.com/ckirkendall">Creighton Kirkendall</a> created <a href="https://github.com/ckirkendall/kioo">Kioo</a>, which adds Enlive-style templating to React. HTML templates are separated from the application logic. Kioo comes with separate examples for both Om and Reagent.</p>
|
||||
|
||||
<p>A basic example from github:</p>
|
||||
<div class="highlight"><pre><code class="html language-html" data-lang="html"><span class="cp">&lt;!DOCTYPE html&gt;</span>
|
||||
<span class="nt">&lt;html</span> <span class="na">lang=</span><span class="s">&quot;en&quot;</span><span class="nt">&gt;</span>
|
||||
<span class="nt">&lt;body&gt;</span>
|
||||
<span class="nt">&lt;header&gt;</span>
|
||||
<span class="nt">&lt;h1&gt;</span>Header placeholder<span class="nt">&lt;/h1&gt;</span>
|
||||
<span class="nt">&lt;ul</span> <span class="na">id=</span><span class="s">&quot;navigation&quot;</span><span class="nt">&gt;</span>
|
||||
<span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">&quot;nav-item&quot;</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Placeholder<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
|
||||
<span class="nt">&lt;/ul&gt;</span>
|
||||
<span class="nt">&lt;/header&gt;</span>
|
||||
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;content&quot;</span><span class="nt">&gt;</span>place holder<span class="nt">&lt;/div&gt;</span>
|
||||
<span class="nt">&lt;/body&gt;</span>
|
||||
<span class="nt">&lt;/html&gt;</span>
|
||||
</code></pre></div><div class="highlight"><pre><code class="clojure language-clojure" data-lang="clojure"><span class="nv">...</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-nav-item</span> <span class="p">[[</span><span class="nv">caption</span> <span class="nv">func</span><span class="p">]]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">&quot;main.html&quot;</span> <span class="p">[</span><span class="ss">:.nav-item</span><span class="p">]</span>
|
||||
<span class="p">{[</span><span class="ss">:a</span><span class="p">]</span> <span class="p">(</span><span class="nf">do-&gt;</span> <span class="p">(</span><span class="nf">content</span> <span class="nv">caption</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="nf">set-attr</span> <span class="ss">:onClick</span> <span class="nv">func</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-header</span> <span class="p">[</span><span class="nv">heading</span> <span class="nv">nav-elms</span><span class="p">]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">&quot;main.html&quot;</span> <span class="p">[</span><span class="ss">:header</span><span class="p">]</span>
|
||||
<span class="p">{[</span><span class="ss">:h1</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="nv">heading</span><span class="p">)</span>
|
||||
<span class="p">[</span><span class="ss">:ul</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="p">(</span><span class="nb">map </span><span class="nv">my-nav-item</span> <span class="nv">nav-elms</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="kd">defn </span><span class="nv">my-page</span> <span class="p">[</span><span class="nv">data</span><span class="p">]</span>
|
||||
<span class="p">(</span><span class="nf">kioo/component</span> <span class="s">&quot;main.html&quot;</span>
|
||||
<span class="p">{[</span><span class="ss">:header</span><span class="p">]</span> <span class="p">(</span><span class="nf">substitute</span> <span class="p">(</span><span class="nf">my-header</span> <span class="p">(</span><span class="ss">:heading</span> <span class="nv">data</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="ss">:navigation</span> <span class="nv">data</span><span class="p">)))</span>
|
||||
<span class="p">[</span><span class="ss">:.content</span><span class="p">]</span> <span class="p">(</span><span class="nf">content</span> <span class="p">(</span><span class="ss">:content</span> <span class="nv">data</span><span class="p">))}))</span>
|
||||
|
||||
<span class="p">(</span><span class="k">def </span><span class="nv">app-state</span> <span class="p">(</span><span class="nf">atom</span> <span class="p">{</span><span class="ss">:heading</span> <span class="s">&quot;main&quot;</span>
|
||||
<span class="ss">:content</span> <span class="s">&quot;Hello World&quot;</span>
|
||||
<span class="ss">:navigation</span> <span class="p">[[</span><span class="s">&quot;home&quot;</span> <span class="o">#</span><span class="p">(</span><span class="nf">js/alert</span> <span class="nv">%</span><span class="p">)]</span>
|
||||
<span class="p">[</span><span class="s">&quot;next&quot;</span> <span class="o">#</span><span class="p">(</span><span class="nf">js/alert</span> <span class="nv">%</span><span class="p">)]]}))</span>
|
||||
|
||||
<span class="p">(</span><span class="nf">om/root</span> <span class="nv">app-state</span> <span class="nv">my-page</span> <span class="p">(</span><span class="nf">.-body</span> <span class="nv">js/document</span><span class="p">))</span>
|
||||
</code></pre></div><h2><a class="anchor" name="om"></a>Om <a class="hash-link" href="#om">#</a></h2>
|
||||
<p>In an interview with David Nolen, Tom Coupland (<a href="https://twitter.com/tcoupland">@tcoupland</a>) of InfoQ provides a nice summary of recent developments around Om (&quot;<a href="http://www.infoq.com/news/2014/01/om-react">Om: Enhancing Facebook&#39;s React with Immutability</a>&quot;).</p>
|
||||
|
||||
<blockquote>
|
||||
<p>David [Nolen]: I think people are starting to see the limitations of just JavaScript and jQuery and even more structured solutions like Backbone, Angular, Ember, etc. React is a fresh approach to the DOM problem that seems obvious in hindsight.</p>
|
||||
|
||||
<p><a href="http://www.infoq.com/news/2014/01/om-react">Read the full interview...</a></p>
|
||||
</blockquote>
|
||||
<h3><a class="anchor" name="a-slice-of-react-clojurescript-and-om"></a>A slice of React, ClojureScript and Om <a class="hash-link" href="#a-slice-of-react-clojurescript-and-om">#</a></h3>
|
||||
<p>Fredrik Dyrkell (<a href="https://twitter.com/lexicallyscoped">@lexicallyscoped</a>) rewrote part of the <a href="http://www.lexicallyscoped.com/2013/12/25/slice-of-reactjs-and-cljs.html">React tutorial in both ClojureScript and Om</a>, along with short, helpful explanations.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>React has sparked a lot of interest in the Clojure community lately [...]. At the very core, React lets you build up your DOM representation in a functional fashion by composing pure functions and you have a simple building block for everything: React components.</p>
|
||||
|
||||
<p><a href="http://www.lexicallyscoped.com/2013/12/25/slice-of-reactjs-and-cljs.html">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
|
||||
<p>In a separate post, Dyrkell breaks down <a href="http://www.lexicallyscoped.com/2014/01/23/ClojureScript-react-om-binary-clock.html">how to build a binary clock component</a> in Om.</p>
|
||||
|
||||
<p>[<a href="http://www.lexicallyscoped.com/demo/binclock/">Demo</a>] [<a href="https://github.com/fredyr/binclock/blob/master/src/binclock/core.cljs">Code</a>]</p>
|
||||
<h3><a class="anchor" name="time-travel-implementing-undo-in-om"></a>Time Travel: Implementing undo in Om <a class="hash-link" href="#time-travel-implementing-undo-in-om">#</a></h3>
|
||||
<p>David Nolen shows how to leverage immutable data structures to <a href="http://swannodette.github.io/2013/12/31/time-travel/">add global undo</a> functionality to an app – using just 13 lines of ClojureScript.</p>
|
||||
<h3><a class="anchor" name="a-step-by-step-om-walkthrough"></a>A Step-by-Step Om Walkthrough <a class="hash-link" href="#a-step-by-step-om-walkthrough">#</a></h3>
|
||||
<p><a href="http://www.joshlehman.me">Josh Lehman</a> took the time to create an extensive <a href="http://www.joshlehman.me/rewriting-the-react-tutorial-in-om/">step-by-step walkthrough</a> of the React tutorial in Om. The well-documented source is on <a href="https://github.com/jalehman/omtut-starter">github</a>.</p>
|
||||
<h3><a class="anchor" name="omkara"></a>Omkara <a class="hash-link" href="#omkara">#</a></h3>
|
||||
<p><a href="https://github.com/brendanyounger">brendanyounger</a> created <a href="https://github.com/brendanyounger/omkara">omkara</a>, a starting point for ClojureScript web apps based on Om/React. It aims to take advantage of server-side rendering and comes with a few tips on getting started with Om/React projects.</p>
|
||||
<h3><a class="anchor" name="om-experience-report"></a>Om Experience Report <a class="hash-link" href="#om-experience-report">#</a></h3>
|
||||
<p>Adam Solove (<a href="https://twitter.com/asolove/">@asolove</a>) <a href="http://adamsolove.com/js/clojure/2014/01/06/om-experience-report.html">dives a little deeper into Om, React and ClojureScript</a>. He shares some helpful tips he gathered while building his <a href="https://github.com/asolove/carto-crayon">CartoCrayon</a> prototype.</p>
|
||||
<h2><a class="anchor" name="not-so-random-tweet"></a>Not-so-random Tweet <a class="hash-link" href="#not-so-random-tweet">#</a></h2>
|
||||
<div><blockquote class="twitter-tweet" lang="en"><p>[@swannodette](https://twitter.com/swannodette) No thank you! It's honestly a bit weird because Om is exactly what I didn't know I wanted for doing functional UI work.</p>&mdash; Adam Solove (@asolove) <a href="https://twitter.com/asolove/status/420294067637858304">January 6, 2014</a></blockquote></div>
|
||||
</description>
|
||||
<pubDate>2014-02-05T00:00:00-08:00</pubDate>
|
||||
<link>http://facebook.github.io/react/blog/2014/02/05/community-roundup-15.html</link>
|
||||
<guid isPermaLink="true">http://facebook.github.io/react/blog/2014/02/05/community-roundup-15.html</guid>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Community Round-up #14</title>
|
||||
<description><p>The theme of this first round-up of 2014 is integration. I&#39;ve tried to assemble a list of articles and projects that use React in various environments.</p>
|
||||
@@ -72,7 +183,7 @@ rails s
|
||||
<p><a href="http://skulbuny.com/2013/10/31/react-vs-angular/">Read the full post...</a></p>
|
||||
</blockquote>
|
||||
<h2><a class="anchor" name="random-tweet"></a>Random Tweet <a class="hash-link" href="#random-tweet">#</a></h2>
|
||||
<figure><blockquote class="twitter-tweet" lang="en"><p>Really intrigued by React.js. I&#39;ve looked at all JS frameworks, and excepting <a href="https://twitter.com/serenadejs">@serenadejs</a> this is the first one which makes sense to me.</p>&mdash; Jonas Nicklas (@jonicklas) <a href="https://twitter.com/jonicklas/statuses/412640708755869696">December 16, 2013</a></blockquote></figure>
|
||||
<div><blockquote class="twitter-tweet" lang="en"><p>Really intrigued by React.js. I&#39;ve looked at all JS frameworks, and excepting <a href="https://twitter.com/serenadejs">@serenadejs</a> this is the first one which makes sense to me.</p>&mdash; Jonas Nicklas (@jonicklas) <a href="https://twitter.com/jonicklas/statuses/412640708755869696">December 16, 2013</a></blockquote></div>
|
||||
</description>
|
||||
<pubDate>2014-01-06T00:00:00-08:00</pubDate>
|
||||
<link>http://facebook.github.io/react/blog/2014/01/06/community-roundup-14.html</link>
|
||||
@@ -380,7 +491,7 @@ componentDidUpdate: function() {
|
||||
<h2><a class="anchor" name="140-characters-textarea"></a>140-characters textarea <a class="hash-link" href="#140-characters-textarea">#</a></h2>
|
||||
<p><a href="https://github.com/brainkim">Brian Kim</a> wrote a small textarea component that gradually turns red as you reach the 140-characters limit. Because he only changes the background color, React is smart enough not to mess with the text selection.</p>
|
||||
|
||||
<p data-height="178" data-theme-id="0" data-slug-hash="FECGb" data-user="brainkim" data-default-tab="result" class='codepen'>See the Pen <a href='http://codepen.io/brainkim/pen/FECGb'>FECGb</a> by Brian Kim (<a href='http://codepen.io/brainkim'>@brainkim</a>) on <a href='http://codepen.io'>CodePen</a></p>
|
||||
<p data-height="178" data-theme-id="0" data-slug-hash="FECGb" data-user="brainkim" data-default-tab="result" class='codepen'>See the Pen <a href='http://codepen.io/brainkim/pen/FECGb'>FECGb</a> by Brian Kim (<a href='http://codepen.io/brainkim'>@brainkim</a>) on <a href='http://codepen.io'>CodePen</a></p>
|
||||
|
||||
<script async src="//codepen.io/assets/embed/ei.js"></script>
|
||||
<h2><a class="anchor" name="genesis-skeleton"></a>Genesis Skeleton <a class="hash-link" href="#genesis-skeleton">#</a></h2>
|
||||
@@ -683,25 +794,5 @@ Is this some sort of template language? Specifically no. This might have been th
|
||||
<guid isPermaLink="true">http://facebook.github.io/react/blog/2013/11/05/thinking-in-react.html</guid>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>React v0.5.1</title>
|
||||
<description><p>This release focuses on fixing some small bugs that have been uncovered over the past two weeks. I would like to thank everybody involved, specifically members of the community who fixed half of the issues found. Thanks to <a href="https://github.com/spicyj">Ben Alpert</a>, <a href="https://github.com/andreypopp">Andrey Popp</a>, and <a href="https://github.com/lrowe">Laurence Rowe</a> for their contributions!</p>
|
||||
<h2><a class="anchor" name="changelog"></a>Changelog <a class="hash-link" href="#changelog">#</a></h2><h3><a class="anchor" name="react"></a>React <a class="hash-link" href="#react">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bug with <code>&lt;input type=&quot;range&quot;&gt;</code> and selection events.</li>
|
||||
<li>Fixed bug with selection and focus.</li>
|
||||
<li>Made it possible to unmount components from the document root.</li>
|
||||
<li>Fixed bug for <code>disabled</code> attribute handling on non-<code>&lt;input&gt;</code> elements.</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="react-with-addons"></a>React with Addons <a class="hash-link" href="#react-with-addons">#</a></h3>
|
||||
<ul>
|
||||
<li>Fixed bug with transition and animation event detection.</li>
|
||||
</ul>
|
||||
</description>
|
||||
<pubDate>2013-10-29T00:00:00-07:00</pubDate>
|
||||
<link>http://facebook.github.io/react/blog/2013/10/29/react-v0-5-1.html</link>
|
||||
<guid isPermaLink="true">http://facebook.github.io/react/blog/2013/10/29/react-v0-5-1.html</guid>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||
-446
@@ -1,446 +0,0 @@
|
||||
// Copyright 2009-2012 by contributors, MIT License
|
||||
// vim: ts=4 sts=4 sw=4 expandtab
|
||||
|
||||
//Add semicolon to prevent IIFE from being passed as argument to concated code.
|
||||
;
|
||||
// Module systems magic dance
|
||||
(function (definition) {
|
||||
// RequireJS
|
||||
if (typeof define == "function") {
|
||||
define(definition);
|
||||
// YUI3
|
||||
} else if (typeof YUI == "function") {
|
||||
YUI.add("es5-sham", definition);
|
||||
// CommonJS and <script>
|
||||
} else {
|
||||
definition();
|
||||
}
|
||||
})(function () {
|
||||
|
||||
|
||||
var call = Function.prototype.call;
|
||||
var prototypeOfObject = Object.prototype;
|
||||
var owns = call.bind(prototypeOfObject.hasOwnProperty);
|
||||
|
||||
// If JS engine supports accessors creating shortcuts.
|
||||
var defineGetter;
|
||||
var defineSetter;
|
||||
var lookupGetter;
|
||||
var lookupSetter;
|
||||
var supportsAccessors;
|
||||
if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
|
||||
defineGetter = call.bind(prototypeOfObject.__defineGetter__);
|
||||
defineSetter = call.bind(prototypeOfObject.__defineSetter__);
|
||||
lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
|
||||
lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
|
||||
}
|
||||
|
||||
// ES5 15.2.3.2
|
||||
// http://es5.github.com/#x15.2.3.2
|
||||
if (!Object.getPrototypeOf) {
|
||||
// https://github.com/es-shims/es5-shim/issues#issue/2
|
||||
// http://ejohn.org/blog/objectgetprototypeof/
|
||||
// recommended by fschaefer on github
|
||||
Object.getPrototypeOf = function getPrototypeOf(object) {
|
||||
return object.__proto__ || (
|
||||
object.constructor
|
||||
? object.constructor.prototype
|
||||
: prototypeOfObject
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
//ES5 15.2.3.3
|
||||
//http://es5.github.com/#x15.2.3.3
|
||||
|
||||
function doesGetOwnPropertyDescriptorWork(object) {
|
||||
try {
|
||||
object.sentinel = 0;
|
||||
return Object.getOwnPropertyDescriptor(
|
||||
object,
|
||||
"sentinel"
|
||||
).value === 0;
|
||||
} catch (exception) {
|
||||
// returns falsy
|
||||
}
|
||||
}
|
||||
|
||||
//check whether getOwnPropertyDescriptor works if it's given. Otherwise,
|
||||
//shim partially.
|
||||
if (Object.defineProperty) {
|
||||
var getOwnPropertyDescriptorWorksOnObject =
|
||||
doesGetOwnPropertyDescriptorWork({});
|
||||
var getOwnPropertyDescriptorWorksOnDom = typeof document == "undefined" ||
|
||||
doesGetOwnPropertyDescriptorWork(document.createElement("div"));
|
||||
if (!getOwnPropertyDescriptorWorksOnDom ||
|
||||
!getOwnPropertyDescriptorWorksOnObject
|
||||
) {
|
||||
var getOwnPropertyDescriptorFallback = Object.getOwnPropertyDescriptor;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Object.getOwnPropertyDescriptor || getOwnPropertyDescriptorFallback) {
|
||||
var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a non-object: ";
|
||||
|
||||
Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
|
||||
if ((typeof object != "object" && typeof object != "function") || object === null) {
|
||||
throw new TypeError(ERR_NON_OBJECT + object);
|
||||
}
|
||||
|
||||
// make a valiant attempt to use the real getOwnPropertyDescriptor
|
||||
// for I8's DOM elements.
|
||||
if (getOwnPropertyDescriptorFallback) {
|
||||
try {
|
||||
return getOwnPropertyDescriptorFallback.call(Object, object, property);
|
||||
} catch (exception) {
|
||||
// try the shim if the real one doesn't work
|
||||
}
|
||||
}
|
||||
|
||||
// If object does not owns property return undefined immediately.
|
||||
if (!owns(object, property)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If object has a property then it's for sure both `enumerable` and
|
||||
// `configurable`.
|
||||
var descriptor = { enumerable: true, configurable: true };
|
||||
|
||||
// If JS engine supports accessor properties then property may be a
|
||||
// getter or setter.
|
||||
if (supportsAccessors) {
|
||||
// Unfortunately `__lookupGetter__` will return a getter even
|
||||
// if object has own non getter property along with a same named
|
||||
// inherited getter. To avoid misbehavior we temporary remove
|
||||
// `__proto__` so that `__lookupGetter__` will return getter only
|
||||
// if it's owned by an object.
|
||||
var prototype = object.__proto__;
|
||||
object.__proto__ = prototypeOfObject;
|
||||
|
||||
var getter = lookupGetter(object, property);
|
||||
var setter = lookupSetter(object, property);
|
||||
|
||||
// Once we have getter and setter we can put values back.
|
||||
object.__proto__ = prototype;
|
||||
|
||||
if (getter || setter) {
|
||||
if (getter) {
|
||||
descriptor.get = getter;
|
||||
}
|
||||
if (setter) {
|
||||
descriptor.set = setter;
|
||||
}
|
||||
// If it was accessor property we're done and return here
|
||||
// in order to avoid adding `value` to the descriptor.
|
||||
return descriptor;
|
||||
}
|
||||
}
|
||||
|
||||
// If we got this far we know that object has an own property that is
|
||||
// not an accessor so we set it as a value and return descriptor.
|
||||
descriptor.value = object[property];
|
||||
descriptor.writable = true;
|
||||
return descriptor;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.4
|
||||
// http://es5.github.com/#x15.2.3.4
|
||||
if (!Object.getOwnPropertyNames) {
|
||||
Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
|
||||
return Object.keys(object);
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.5
|
||||
// http://es5.github.com/#x15.2.3.5
|
||||
if (!Object.create) {
|
||||
|
||||
// Contributed by Brandon Benvie, October, 2012
|
||||
var createEmpty;
|
||||
var supportsProto = Object.prototype.__proto__ === null;
|
||||
if (supportsProto || typeof document == 'undefined') {
|
||||
createEmpty = function () {
|
||||
return { "__proto__": null };
|
||||
};
|
||||
} else {
|
||||
// In old IE __proto__ can't be used to manually set `null`, nor does
|
||||
// any other method exist to make an object that inherits from nothing,
|
||||
// aside from Object.prototype itself. Instead, create a new global
|
||||
// object and *steal* its Object.prototype and strip it bare. This is
|
||||
// used as the prototype to create nullary objects.
|
||||
createEmpty = function () {
|
||||
var iframe = document.createElement('iframe');
|
||||
var parent = document.body || document.documentElement;
|
||||
iframe.style.display = 'none';
|
||||
parent.appendChild(iframe);
|
||||
iframe.src = 'javascript:';
|
||||
var empty = iframe.contentWindow.Object.prototype;
|
||||
parent.removeChild(iframe);
|
||||
iframe = null;
|
||||
delete empty.constructor;
|
||||
delete empty.hasOwnProperty;
|
||||
delete empty.propertyIsEnumerable;
|
||||
delete empty.isPrototypeOf;
|
||||
delete empty.toLocaleString;
|
||||
delete empty.toString;
|
||||
delete empty.valueOf;
|
||||
empty.__proto__ = null;
|
||||
|
||||
function Empty() {}
|
||||
Empty.prototype = empty;
|
||||
// short-circuit future calls
|
||||
createEmpty = function () {
|
||||
return new Empty();
|
||||
};
|
||||
return new Empty();
|
||||
};
|
||||
}
|
||||
|
||||
Object.create = function create(prototype, properties) {
|
||||
|
||||
var object;
|
||||
function Type() {} // An empty constructor.
|
||||
|
||||
if (prototype === null) {
|
||||
object = createEmpty();
|
||||
} else {
|
||||
if (typeof prototype !== "object" && typeof prototype !== "function") {
|
||||
// In the native implementation `parent` can be `null`
|
||||
// OR *any* `instanceof Object` (Object|Function|Array|RegExp|etc)
|
||||
// Use `typeof` tho, b/c in old IE, DOM elements are not `instanceof Object`
|
||||
// like they are in modern browsers. Using `Object.create` on DOM elements
|
||||
// is...err...probably inappropriate, but the native version allows for it.
|
||||
throw new TypeError("Object prototype may only be an Object or null"); // same msg as Chrome
|
||||
}
|
||||
Type.prototype = prototype;
|
||||
object = new Type();
|
||||
// IE has no built-in implementation of `Object.getPrototypeOf`
|
||||
// neither `__proto__`, but this manually setting `__proto__` will
|
||||
// guarantee that `Object.getPrototypeOf` will work as expected with
|
||||
// objects created using `Object.create`
|
||||
object.__proto__ = prototype;
|
||||
}
|
||||
|
||||
if (properties !== void 0) {
|
||||
Object.defineProperties(object, properties);
|
||||
}
|
||||
|
||||
return object;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.6
|
||||
// http://es5.github.com/#x15.2.3.6
|
||||
|
||||
// Patch for WebKit and IE8 standard mode
|
||||
// Designed by hax <hax.github.com>
|
||||
// related issue: https://github.com/es-shims/es5-shim/issues#issue/5
|
||||
// IE8 Reference:
|
||||
// http://msdn.microsoft.com/en-us/library/dd282900.aspx
|
||||
// http://msdn.microsoft.com/en-us/library/dd229916.aspx
|
||||
// WebKit Bugs:
|
||||
// https://bugs.webkit.org/show_bug.cgi?id=36423
|
||||
|
||||
function doesDefinePropertyWork(object) {
|
||||
try {
|
||||
Object.defineProperty(object, "sentinel", {});
|
||||
return "sentinel" in object;
|
||||
} catch (exception) {
|
||||
// returns falsy
|
||||
}
|
||||
}
|
||||
|
||||
// check whether defineProperty works if it's given. Otherwise,
|
||||
// shim partially.
|
||||
if (Object.defineProperty) {
|
||||
var definePropertyWorksOnObject = doesDefinePropertyWork({});
|
||||
var definePropertyWorksOnDom = typeof document == "undefined" ||
|
||||
doesDefinePropertyWork(document.createElement("div"));
|
||||
if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
|
||||
var definePropertyFallback = Object.defineProperty,
|
||||
definePropertiesFallback = Object.defineProperties;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Object.defineProperty || definePropertyFallback) {
|
||||
var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
|
||||
var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
|
||||
var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
|
||||
"on this javascript engine";
|
||||
|
||||
Object.defineProperty = function defineProperty(object, property, descriptor) {
|
||||
if ((typeof object != "object" && typeof object != "function") || object === null) {
|
||||
throw new TypeError(ERR_NON_OBJECT_TARGET + object);
|
||||
}
|
||||
if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) {
|
||||
throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
|
||||
}
|
||||
// make a valiant attempt to use the real defineProperty
|
||||
// for I8's DOM elements.
|
||||
if (definePropertyFallback) {
|
||||
try {
|
||||
return definePropertyFallback.call(Object, object, property, descriptor);
|
||||
} catch (exception) {
|
||||
// try the shim if the real one doesn't work
|
||||
}
|
||||
}
|
||||
|
||||
// If it's a data property.
|
||||
if (owns(descriptor, "value")) {
|
||||
// fail silently if "writable", "enumerable", or "configurable"
|
||||
// are requested but not supported
|
||||
/*
|
||||
// alternate approach:
|
||||
if ( // can't implement these features; allow false but not true
|
||||
!(owns(descriptor, "writable") ? descriptor.writable : true) ||
|
||||
!(owns(descriptor, "enumerable") ? descriptor.enumerable : true) ||
|
||||
!(owns(descriptor, "configurable") ? descriptor.configurable : true)
|
||||
)
|
||||
throw new RangeError(
|
||||
"This implementation of Object.defineProperty does not " +
|
||||
"support configurable, enumerable, or writable."
|
||||
);
|
||||
*/
|
||||
|
||||
if (supportsAccessors && (lookupGetter(object, property) ||
|
||||
lookupSetter(object, property)))
|
||||
{
|
||||
// As accessors are supported only on engines implementing
|
||||
// `__proto__` we can safely override `__proto__` while defining
|
||||
// a property to make sure that we don't hit an inherited
|
||||
// accessor.
|
||||
var prototype = object.__proto__;
|
||||
object.__proto__ = prototypeOfObject;
|
||||
// Deleting a property anyway since getter / setter may be
|
||||
// defined on object itself.
|
||||
delete object[property];
|
||||
object[property] = descriptor.value;
|
||||
// Setting original `__proto__` back now.
|
||||
object.__proto__ = prototype;
|
||||
} else {
|
||||
object[property] = descriptor.value;
|
||||
}
|
||||
} else {
|
||||
if (!supportsAccessors) {
|
||||
throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
|
||||
}
|
||||
// If we got that far then getters and setters can be defined !!
|
||||
if (owns(descriptor, "get")) {
|
||||
defineGetter(object, property, descriptor.get);
|
||||
}
|
||||
if (owns(descriptor, "set")) {
|
||||
defineSetter(object, property, descriptor.set);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.7
|
||||
// http://es5.github.com/#x15.2.3.7
|
||||
if (!Object.defineProperties || definePropertiesFallback) {
|
||||
Object.defineProperties = function defineProperties(object, properties) {
|
||||
// make a valiant attempt to use the real defineProperties
|
||||
if (definePropertiesFallback) {
|
||||
try {
|
||||
return definePropertiesFallback.call(Object, object, properties);
|
||||
} catch (exception) {
|
||||
// try the shim if the real one doesn't work
|
||||
}
|
||||
}
|
||||
|
||||
for (var property in properties) {
|
||||
if (owns(properties, property) && property != "__proto__") {
|
||||
Object.defineProperty(object, property, properties[property]);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.8
|
||||
// http://es5.github.com/#x15.2.3.8
|
||||
if (!Object.seal) {
|
||||
Object.seal = function seal(object) {
|
||||
// this is misleading and breaks feature-detection, but
|
||||
// allows "securable" code to "gracefully" degrade to working
|
||||
// but insecure code.
|
||||
return object;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.9
|
||||
// http://es5.github.com/#x15.2.3.9
|
||||
if (!Object.freeze) {
|
||||
Object.freeze = function freeze(object) {
|
||||
// this is misleading and breaks feature-detection, but
|
||||
// allows "securable" code to "gracefully" degrade to working
|
||||
// but insecure code.
|
||||
return object;
|
||||
};
|
||||
}
|
||||
|
||||
// detect a Rhino bug and patch it
|
||||
try {
|
||||
Object.freeze(function () {});
|
||||
} catch (exception) {
|
||||
Object.freeze = (function freeze(freezeObject) {
|
||||
return function freeze(object) {
|
||||
if (typeof object == "function") {
|
||||
return object;
|
||||
} else {
|
||||
return freezeObject(object);
|
||||
}
|
||||
};
|
||||
})(Object.freeze);
|
||||
}
|
||||
|
||||
// ES5 15.2.3.10
|
||||
// http://es5.github.com/#x15.2.3.10
|
||||
if (!Object.preventExtensions) {
|
||||
Object.preventExtensions = function preventExtensions(object) {
|
||||
// this is misleading and breaks feature-detection, but
|
||||
// allows "securable" code to "gracefully" degrade to working
|
||||
// but insecure code.
|
||||
return object;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.11
|
||||
// http://es5.github.com/#x15.2.3.11
|
||||
if (!Object.isSealed) {
|
||||
Object.isSealed = function isSealed(object) {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.12
|
||||
// http://es5.github.com/#x15.2.3.12
|
||||
if (!Object.isFrozen) {
|
||||
Object.isFrozen = function isFrozen(object) {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
// ES5 15.2.3.13
|
||||
// http://es5.github.com/#x15.2.3.13
|
||||
if (!Object.isExtensible) {
|
||||
Object.isExtensible = function isExtensible(object) {
|
||||
// 1. If Type(O) is not Object throw a TypeError exception.
|
||||
if (Object(object) !== object) {
|
||||
throw new TypeError(); // TODO message
|
||||
}
|
||||
// 2. Return the Boolean value of the [[Extensible]] internal property of O.
|
||||
var name = '';
|
||||
while (owns(object, name)) {
|
||||
name += '?';
|
||||
}
|
||||
object[name] = true;
|
||||
var returnValue = owns(object, name);
|
||||
delete object[name];
|
||||
return returnValue;
|
||||
};
|
||||
}
|
||||
|
||||
});
|
||||
-1360
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -71,7 +71,7 @@
|
||||
<h2><a class="anchor" name="twitter"></a>Twitter <a class="hash-link" href="#twitter">#</a></h2>
|
||||
<p><a href="https://twitter.com/search?q=%23reactjs"><strong>#reactjs</strong> hash tag on Twitter</a> is used to keep up with the latest React news.</p>
|
||||
|
||||
<p><center><a class="twitter-timeline" data-dnt="true" data-chrome="nofooter noheader transparent" href="https://twitter.com/search?q=%23reactjs" data-widget-id="342522405270470656"></a></center></p>
|
||||
<div><a class="twitter-timeline" data-dnt="true" data-chrome="nofooter noheader transparent" href="https://twitter.com/search?q=%23reactjs" data-widget-id="342522405270470656"></a></div>
|
||||
|
||||
|
||||
<div class="docs-prevnext">
|
||||
|
||||
Reference in New Issue
Block a user