2016-03-28 20 views
0

React.createClassを使用してReact.Componentから拡張するES6のアプローチを使用する代わりに、コンポーネントを定義することに何らかの害がありますか?ES6クラス(React.Componentを拡張)ではなくReact.createClassを使用していますか?

以下

サークルコンポーネントがReact.createClassを使用して作成され、CIRCLE2コンポーネントがES6クラスのアプローチを使用して作成された例である:私は両方のアプローチの間の技術的な違いについて読んだことがある

var Circle = React.createClass({ 
    render: function() { 
     return (
     <p>Hello</p> 
    ); 
    } 
}); 

class Circle2 extends React.Component { 
    render() { 
    return <p>Hello</p>; 
    } 
} 

が、午前React.createClassを使っても問題ないと言って、私は何か間違ったことをしていますか?

おかげで、
Kirupa

+0

これは「広すぎる」問題です。あなたがそれを絞り込むために、例や特別な事例を教えてもらえますか? – Athafoud

+0

私に知らせてくれてありがとう。両方のアプローチのコードスニペットを提供しました。 –

+0

この場合は違いはありませんが、 'React.createClass'は' mixins'を使うことができます。あなたはES6を使うことができません。 –

答えて

1

React.createClassを使用しても害はありません。それでも公式の提案in the docsと非公式の提案from the devsです。

実際、私はそれがまだいくつかの理由から、クラスよりも優れた解決策だと言えると思います。

オブジェクトのリテラル構文は、プロパティを定義するのに非常に直感的な方法であり、ほとんどのJavaScript開発者は既にそれに非常に慣れています。

私は、クラスの構文がより洗練されていると主張してきましたが、オブジェクトリテラルの短縮形と矢印関数を使用すると、createClassへの呼び出しもかなり表現できます。

const Circle = React.createClass({ 
    render() { 
    return (
     <p>Hello</p> 
    ); 
    } 
}); 

もちろん、ステートレス関数を使用する機会を探す必要があります。

const Circle = (props) => <p>Hello</p>; 

これは最も単純なオプションで、上記のあいまいさを単純に除外して解決します。これは引数として小道具を取る関数です。

+1

'render:()=>

こんにちは

'のようなものには注意してください。 'this'値が間違っています。 – JMM

関連する問題