2015-08-18 11 views
15

Wie würden Sie das Objekt childContextTypes in ES6 schreiben?childContextTypes in ES6

var A = React.createClass({ 

    childContextTypes: { 
     name: React.PropTypes.string.isRequired 
    }, 

    getChildContext: function() { 
     return { name: "Jonas" }; 
    }, 

    render: function() { 
     return <B />; 
    } 
}); 
+0

Sie würden überhaupt nicht. 'class's unterstützen keine statischen Member. Ordnen Sie es explizit nach der Deklaration zu, oder verwenden Sie 'Object.assign' – Bergi

+0

Uh mein Freund Ich brauche ein wenig mehr Hilfe. Kannst du mir zeigen? –

+1

Hilft dies [http://stackoverflow.com/q/29433130/1048572]? Nicht sicher, ob es ein Duplikat ist – Bergi

Antwort

0

Die Lösung war "childContextTypes" aus der Klasse zu bewegen:

Klasse; { ,, .}

childContextTypes() {..}

Oder ES7 warten statische Eigenschaften.

20

Da Sie Babel verwenden sowieso, können Sie static (ES7) in Ihrem Code verwenden:

export default class A extends React.Component { 

    static childContextTypes = { 
    name: React.PropTypes.string, 
    } 

    getChildContext() { 
    return { name: "Jonas" } 
    } 

    render() { 
    return <B /> 
    } 
} 

Weitere Informationen: React on ES6+

+0

Die Blog-Seite mit mehr Informationen ist umgezogen nach https://babeljs.io/blog/2015/06/07/react-on-es6-plus – jakewins

+0

Danke jakewins. Der Link wurde entsprechend aktualisiert. – cutemachine

10

Das Problem ist, dass childContextTypes Anforderungen an die definiert werden "Klasse", was static tut. So scheinen diese beiden Lösungen zu arbeiten:

class A extends React.Component { 
    constructor() { 
    super(...arguments); 

    this.constructor.childContextTypes = { 
     name: React.PropTypes.string.isRequired 
    }; 
    } 
} 

Oder

class A extends React.Component { 

} 

A.childContextTypes = { 
    name: React.PropTypes.string.isRequired 
}; 
0

try this:

import React, { PropTypes } from 'react'; 
 

 
export default class Grandparent extends React.Component { 
 
    static childContextTypes = { 
 
    getUser: PropTypes.func 
 
    }; 
 

 
    getChildContext() { 
 
    return { 
 
     getUser:() => ({ name: 'Bob' }) 
 
    }; 
 
    } 
 

 
    render() { 
 
    return <Parent />; 
 
    } 
 
} 
 

 
class Parent extends React.Component { 
 
    render() { 
 
    return <Child />; 
 
    } 
 
} 
 

 
class Child extends React.Component { 
 
    static contextTypes = { 
 
    getUser: PropTypes.func.isRequired 
 
    }; 
 

 
    render() { 
 
    const user = this.context.getUser(); 
 
    return <p>Hello {user.name}!</p>; 
 
    } 
 
}

Quellcode hier: React ES6 Context

+0

Es gibt einen Syntaxfehler bei 'getUser:() => ({name: 'Bob'})' –

-1

Wenn Sie Coffeescript verwenden ...

Änderung

childContextTypes: 

zu

@childContextTypes: