広告ここから
広告ここまで
目次
Stateless Functionsなコンポーネント
とは
ザックリ書くとただJSXを返すだけのコンポーネントです。
import React from 'react'; const Item = (prop) => ( <div>{props.title}</div> );
こんな感じ。
handleXXXX
のようなfunctionを持つComponentクラスをextendしたものは内部でstateが変わるのでstatelessではないですね。
propをflowtypeで検証する
functionとして書くので、flowでの検証も同様になります。
// @flow import React from 'react'; type Props = { title: string, handleClick: Function, }; const Item = ({title, handleClick}: Props) => ( <div onClick={handleClick}>{props.title}</div> );
PropTypesとの併用時の注意点
PropTypesからの切り替え時にどっちも書かれている場所が出ることもあるかなと思います。
そんな時は、ESLintのreact/default-props-match-prop-types
に要注意です。
// @flow import React from 'react'; import PropTypes from 'prop-types'; type Props = { title: string, handleClick: Function, }; const Item = ({title, handleClick}: Props) => ( <div onClick={handleClick}>{props.title}</div> ); Item.propTypes = { title: PropTypes.string, handleClick: PropTypes.func.isRequired, } Item.defaultProps = { title: 'no title' }
こんな感じでFlowで型定義してるものに対してdefaultPropsを設定すると怒られます。
29:3 error defaultProp "title" defined for isRequired propType react/default-props-match-prop-types
@flow
したコンポーネントにPropTypesは要らない
FlowTypeがあればPropTypes要らないので、大人しく消しちゃいましょう。
// @flow import React from 'react'; type Props = { title: string, handleClick: Function, }; const Item = ({title = 'no title', handleClick}: Props) => ( <div onClick={handleClick}>{props.title}</div> );
ブックマークや限定記事(予定)など
WP Kyotoサポーター募集中
WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。
14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。
広告ここから
広告ここまで