在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 鍵控的片段
顯示數(shù)據(jù)
組件的引用
Controlled Input 值為 null 的情況
Reconciliation
子 props 的類(lèi)型
組件的詳細(xì)說(shuō)明和生命周期
傳遞 Props
特殊的非 DOM 屬性
組件 API
PureRenderMixin
雙向綁定輔助工具
瀏覽器中的工作原理
深入 JSX
表單組件
Dangerously Set innerHTML
入門(mén)
JSX 中的 If-Else
克隆組件
教程
更多的關(guān)于Refs
JSX 的 false 處理
高級(jí)性能
Mounting 后 componentWillReceiveProps 未被觸發(fā)
簡(jiǎn)介
測(cè)試工具集
JSX 陷阱
工具集成(ToolingIntegration)
公開(kāi)組件功能
通過(guò) AJAX 加載初始數(shù)據(jù)
事件系統(tǒng)
可復(fù)用組件
this.props.children undefined
不可變數(shù)據(jù)的輔助工具(Immutability Helpers)
動(dòng)態(tài)交互式用戶(hù)界面
組件的 DOM 事件監(jiān)聽(tīng)
復(fù)合組件
動(dòng)畫(huà)
插件
JSX 展開(kāi)屬性
行內(nèi)樣式
性能分析工具
類(lèi)名操作
與其他類(lèi)庫(kù)并行使用 React
鍵控的片段
標(biāo)簽和屬性支持
組件間的通信
React (虛擬)DOM 術(shù)語(yǔ)
JSX 根節(jié)點(diǎn)的最大數(shù)量
在樣式props中快速制定像素值
頂層 API
深入理解 React
自閉合標(biāo)簽
為什么使用 React?
getInitialState 里的 Props 是一個(gè)反模式
與 DOM 的差異

鍵控的片段

在大多數(shù)情況下,您可以使用 key 道具來(lái)指定你從 render 返回的元素的鍵。然而,這種做法在一種情況下是不成立的:如果你有兩組需要重新排序的孩子,那么在不增加包裝器元素的情況下沒(méi)有辦法給每組放置一個(gè)鍵。

也就是說(shuō),如果你有一個(gè)組件,例如:

var Swapper = React.createClass({
  propTypes: {
    // `leftChildren` and `rightChildren` can be a string, element, array, etc.
    leftChildren: React.PropTypes.node,
    rightChildren: React.PropTypes.node,
    swapped: React.PropTypes.bool
  }
  render: function() {
    var children;
    if (this.props.swapped) {
      children = [this.props.rightChildren, this.props.leftChildren];
    } else {
      children = [this.props.leftChildren, this.props.rightChildren];
    }
    return <div>{children}</div>;
  }
});

當(dāng)你改變 swapped 道具時(shí),子組件會(huì)卸載并重新安裝,因?yàn)闆](méi)有任何鍵標(biāo)記了這兩組子組件。

為了解決這個(gè)問(wèn)題,你可以使用 React.addons.createFragment 給兩組孩子設(shè)置鍵。

ReactFragment React.addons.createFragment(object children)

不是創(chuàng)建數(shù)組,我們寫(xiě):

if (this.props.swapped) {
  children = React.addons.createFragment({
    right: this.props.rightChildren,
    left: this.props.leftChildren
  });
} else {
  children = React.addons.createFragment({
    left: this.props.leftChildren,
    right: this.props.rightChildren
  });
}

傳遞的對(duì)象的鍵(即,leftright)用來(lái)當(dāng)作整個(gè)子組件組的鍵,并且對(duì)象的鍵的順序是用于確定子組件呈現(xiàn)的順序的。有了這個(gè)變化,兩組孩子將在不被卸載的情況下,在 DOM 中正確地重新排序。

createFragment 的返回值應(yīng)該被視為一個(gè)不透明的對(duì)象;你可以使用 React.Children 助手來(lái)在片段中循環(huán),但不應(yīng)該直接訪(fǎng)問(wèn)它。還要注意我們依靠 JavaScript 引擎保存對(duì)象枚舉順序,這不是由規(guī)范保證的,而是通過(guò)所有的主瀏覽器和非數(shù)字鍵對(duì)象的 VMs 實(shí)現(xiàn)的。

注意:

將來(lái) createFragment 有可能被如下所示的 API 取代:

return (
<div>
<x:frag key="right">{this.props.rightChildren}</x:frag>,
<x:frag key="left">{this.props.leftChildren}</x:frag>
</div>
);

允許你直接在 JSX 中分配鍵,不用添加包裝器元素。

上一篇:教程下一篇:this.props.children undefined