javascript reactjs ecmascript-6 es2015

javascript - childContextTypes en ES6



reactjs ecmascript-6 (5)

¿Cómo escribirías el objeto childContextTypes en ES6?

var A = React.createClass({ childContextTypes: { name: React.PropTypes.string.isRequired }, getChildContext: function() { return { name: "Jonas" }; }, render: function() { return <B />; } });


La solución fue mover "childContextTypes" fuera de la clase:

clase { .,, };

childContextTypes () {..}

O espere a que ES7 tenga propiedades estáticas.


El problema es que childContextTypes debe definirse en la "clase", que es lo que hace static . Entonces estas dos soluciones parecen funcionar:

class A extends React.Component { constructor() { super(...arguments); this.constructor.childContextTypes = { name: React.PropTypes.string.isRequired }; } }

O

class A extends React.Component { } A.childContextTypes = { name: React.PropTypes.string.isRequired };


Ya que está usando Babel de todos modos, puede usar static (ES7) en su código de esta manera:

export default class A extends React.Component { static childContextTypes = { name: React.PropTypes.string, } getChildContext() { return { name: "Jonas" } } render() { return <B /> } }

Más información: reacciona en ES6 +


prueba esto:

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>; } }

Formulario de código fuente aquí: React ES6 Context


Si está utilizando Coffeescript ...

cambio

childContextTypes:

a

@childContextTypes: