プロジェクト内のコンポーネントの構成

多くはPresentationalおよびContainer Componentsの推奨事項に基づいていますが、尊敬されている著者は脚注で分離の概念は議論の余地があり、コンポーネントを混在させることができることを認めています。 もしそうなら、なぜハンドルなしでスーツケースをドラッグしますか? すべてのプロジェクトコンポーネントを1つの共有フォルダーに保存する方が便利です。 長所は何ですか:
  • 簡単なファイルシステムナビゲーション。
  • プロジェクトコンポーネントの一意の名前。
  • 苦労せずにインポート( '../../../../../ ..')。


プロジェクトが大きくなったら、実装をカプセル化してプライベートnpmパッケージに分割する必要があります。 ただし、コンポーネントフォルダー内のサブフォルダーのツリーを成長させないでください。これを開発および維持することは非常に困難です。 確認済み。

すべてのコンポーネントは、1つのsrc / componensフォルダーにドメイン原則ごとに整理されています。 たとえば、次のドメインを定義できます。Post-パブリケーションの表示、PostForm-パブリケーションの編集形式。


ドメインコンポーネントの作成方法-src / components / Post /Post.js。


Post.jsの代わりにindex.jsを使用できない理由-プロジェクト内のコンポーネントファイル名の一意性が尊重され、エディターのタブのナビゲーションが簡素化されます(選択したファイルコンテキストメニューの貴重な使用状況の検索機能がWebStormで機能します-注を参照)。


ドメインコンポーネントフォルダ内のすべてのコンポーネントは、ドメインコンポーネントプレフィックス(Post * .js)を受け取ります。


ドメインコンポーネントフォルダー内のサブフォルダーは許可されません。内部には、 子孫コンポーネント (PostTitle.js、PostBody.js)および祖先コンポーネント (PostViewPage.js、PostListPage.js)からのファイルのフラット構造があります。 子孫コンポーネントはドメインコンポーネント内で使用され、祖先コンポーネントは外部(たとえばルーター内)で使用されます。


ドメインコンポーネントをインポートするには、ドメインコンポーネントの各フォルダー内にpackage.jsonを設定する必要があります。このフォルダーにエントリポイント「main」を入力します。


{ "name": "Post", "version": "0.0.0", "private": true, "main": "./Post.js", } 

さらに、先祖コンポーネントの再エクスポートがドメインコンポーネントファイル(Post.js)内で宣言されています。


 import PostViewPage from './PostViewPage' import PostListPage from './PostListPage' //... export { PostViewPage, PostListPage } export default Post 

残念ながら、次のように「エクスポート元」コンストラクト(WebStormの制限)を使用することはできません。


 export { default as PostViewPage } from './PostViewPage' 

その結果、次のように、コンポーネントフォルダー内のファイルへの明示的なアクセスは必要ありません。


 import Post from 'components/Post/Post' 

合意により、ドメインコンポーネントの名前でのみインポートを使用できます。


 import Post, { PostViewPage, PostListPage } from 'components/Post' 

ソースコード


WebStormの「使用状況の検索」機能に関する注意 。 少なくとも3つの使用コンテキストがあります。1)選択したファイルによる、2)選択した変数またはシンボルによる、3)コンポーネントのエクスポートで選択したデフォルトによる。


1)検索結果であるファイルコンポーネント/ Post / PostViewPage.jsを選択します。


 // Post.js import PostViewPage from './PostViewPage' 

2)PostViewPage.jsファイル内のPostViewPageシンボル、検索結果を選択します。


 // PostViewPage.js PostViewPage.propTypes = {} 

3)PostViewPageコンポーネント、検索結果のエクスポートでデフォルトを選択します:


 // routes.js import { PostViewPage } from 'components/Post' <Route exact path="/post/:id(\d+)/" component={PostViewPage} /> 

ご覧のとおり、3番目の使用方法は、祖先コンポーネントに最も役立つ情報を提供します。


PS


コンポーネント内部のCSS

Create React App用にStyled-JSX 固定 する正しい方法を見つけました 。 現在、CSSブロックは、CSS形式で(JSオブジェクトのインラインスタイルに対して)コンポーネントファイル内で自然に生きています。 また、グローバルスコープについて心配する必要はありません。


インポートの絶対パス

srcフォルダーで作業します。例:


 import MyComponent from 'components/MyComponent' 

Babel-plugin-module-resolverの構成

 ['module-resolver', { 'root': ['src'] }] 

WebStormを構成する

コンテキストメニューのsrcフォルダーに対して、「ディレクトリにマークを付ける」>「リソースルート」を実行します。


Atomセットアップ

  • js-hyperclickプラグインをインストールします
  • ドメインコンポーネントの場合、package.jsonにsrcへのパスを記述します。
     "moduleRoots": ["../.."] 

VSCodeを構成する

プロジェクトのルートにjsconfig.jsonを追加する必要があります。


 { "compilerOptions": { "target": "ES6" }, "exclude": [ "node_modules" ] } 


Source: https://habr.com/ru/post/J326018/


All Articles