2017-04-25 8 views
0

私は、Reactコンポーネントのいくつかに小道具として渡しているオブジェクトのキーとして文字列を使用する必要がある位置にいます。 React PropTypesでこの作業を行い、eslintを渡す方法はありますか? string-key-nameが問題を引き起こしている、上記のコードでReact PropTypeで文字列キー名を使用する

MyComponent.propTypes = { 
    'string-key-name': PropTypes.shape({ 
    foo: PropTypes.func.isRequired, 
    bar: PropTypes.string.isRequired, 
    }).isRequired, 
}; 

:ここ

は、いくつかの例のコードです。このオブジェクトのキー名に-を使用する必要があります。これは可能ですか?

EDIT

私は['string-key-name']のような文字列のキーの周りに角括弧を入れてみました、それが動作しませんでした。私は取得しています

EDIT 2

eslintエラーが不足している小道具の検証エラーです。奇妙なことに、'string-key-name'はありませんが、foobarはありません。

'.foo' is missing in props validation  react/prop-types 
'.bar' is missing in props validation  react/prop-types 
+0

あなたのリンターは何を警告していますか? – gforce301

+0

@ gforce301小道具の妥当性確認で小道具が見つからないと言われました – plmok61

+0

あなたは小道具をあなたのコンポーネントに渡していますか? '.isRequired'を取り出します。 – imjared

答えて

0

EDITは:これは情報不足の全く無関係な答えです。

角括弧を使用する場合は、文字列リテラルの代わりに変数を配置する必要があります。

const keyName = 'string-key-name'; 
MyComponent.propTypes = { 
    [keyName]: PropTypes.shape({ 
    foo: PropTypes.func.isRequired, 
    bar: PropTypes.string.isRequired, 
    }).isRequired, 
}; 

はしかし、私はあなたがとにかく-を使用したいので、あなただけのこのケースでeslintを無効にすることができると思います。

'string-key-name': PropTypes.shape({ // eslint-disable-line 

または

// eslint-disable-next-line 
'string-key-name': PropTypes.shape({ 

トリックを行います。

+0

残念ながら、変数を使用しても機能しませんでした。 – plmok61

+0

どのように機能しませんでしたか?ランタイムエラーが発生しましたか、エスリントエラーが発生しましたか?あなたはエラーを投稿できますか? –

+0

私はエラーメッセージ – plmok61

0

私はついにそれを理解しました。 MyComponent

は、私はそうのような小道具を構造化代入した

私は以下のように私のコードを修正
render() { 
    const { foo, bar } = this.props['string-key-name']; 
    return (
    <div> 
     {bar} 
    </div> 
); 

、小道具の検証の問題が消えました。

render() { 
    const props = this.props; 
    return (
    <div> 
     {props['string-key-name'].bar} 
    </div> 
); 
+0

'this.props ['string-key-name'] .bar'と' thisで質問に別の編集を追加しました。props.bar'は違うものです。正しく動作しますか? –

+0

@ShuheiKagawa私の間違いは、答えが正しいように更新されました – plmok61

+0

ああ、更新ありがとう! –

関連する問題