XHP:指南

2018-10-18 11:29 更新

以下是使用XHP時要了解和遵循的一般使用指南。除了其基本用法可用的方法擴展XHP與您自己的對象,這些是其他提示,以充分利用XHP。

屬性和兒童的驗證

XHP對象子元素和屬性的約束在不同時間完成:

  • 兒童約束在渲染時(toString()明確或隱含調(diào)用時)進行驗證。
  • 屬性名稱和類型在標(biāo)簽或通過屬性設(shè)置時進行驗證setAttribute()。
  • @required 在所需屬性被讀取時被驗證。

此驗證默認啟用。您可以在使用XHP之前運行以下代碼來關(guān)閉它:

:XHP :: $ ENABLE_VALIDATION = FALSE

使用上下文訪問較高級別的信息

如果您有parent對象,并且要向UI樹(例如,<ul>to <li>)進一步向某個對象提供信息,則可以為這些較低對象設(shè)置上下文,較低對象可以檢索它們。你使用setContext()和getContext()

<?hh

class :ui-myparent extends :x:element {
  attribute string text @required;
  children (:ui-mychild);

  protected function render(): XHPRoot {
    return (
      <dl>
        <dt>Text</dt>
        <dd>{$this->:text}</dd>
        <dt>Child</dt>
        <dd>{$this->getChildren()}</dd>
      </dl>
    );
  }
}

class :ui-mychild extends :x:element {
  attribute string text @required;

  protected function render(): XHPRoot {
    if ($this->getContext('hint') === 'Yes') {
      return
        <x:frag>{$this->:text . '...and more'}</x:frag>;
    }
    return
      <x:frag>{$this->:text}</x:frag>;
  }
}

function guidelines_examples_context_run(string $s): void {
  $xhp = (
    <ui-myparent text={$s}>
      <ui-mychild text="Go" />
    </ui-myparent>
  );
  $xhp->setContext('hint', $s);
  echo $xhp;
}

guidelines_examples_context_run('No');
echo "\n\n";
guidelines_examples_context_run('Yes');

Output

<DL> <DT>文本</ DT> <DD>沒有</ DD> <DT>子</ DT> <DD>轉(zhuǎn)到</ DD> </ DL>

<dl> <dt>文本</ dt> <dd>是</ dd> <dt> Child </ dt> <dd> Go ... and more </ dd> </ dl>

上下文只在渲染時傳遞給樹; 這允許您構(gòu)建一個樹,而不需要通過數(shù)據(jù)。一般來說,你只應(yīng)該調(diào)用孩子getContext()的render()方法。

常見用途包括:

  • 當(dāng)前用戶ID
  • 當(dāng)前主題在多主題網(wǎng)站
  • 當(dāng)前瀏覽器/設(shè)備類型

不要將公共方法添加到您的XHP組件

XHP對象只能通過其屬性,上下文,樹中的位置和呈現(xiàn)它們進行交互。在Facebook,我們還沒有遇到任何公共方法比這些接口更好的解決方案的情況。

Use Inheritance Minimally

如果您需要一個XHP對象像另一個,但稍作修改,使用組合。類別和屬性克隆可用于提供通用接口。

Remember No Dollar Signs

屬性聲明看起來像Hack屬性聲明:

public string $prop;
attribute string attr;

一個關(guān)鍵的區(qū)別是沒有$在屬性名稱前面。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號