2016-05-28 60 views
1

我正在學習流星和reactjs。我遇到了混合功能。我正在使用es6去除mixin。我現在如何在我的es6代碼中享受mixin的功能?如何讓mixin在es6中工作?

下面是一個代碼

混入使用

Signupform = React.createClass({ 
    mixins: [ReactMeteorData], 
    getMeteorData(){ 
     let data = {}; 
     data.currentUser = Meteor.user(); 
     return data; 
    }, 
    getInitialState(){ 
     return { 
      message: '', 
      messageClass: 'hidden' 
     } 
    }, 
    render(){ 

    } 
}); 

不能使用混入那麼,如何使此代碼工作

import React, { Component } from 'react'; 
import ReactDOM from 'react-dom'; 

export default class SignupForm extends Component { 
    constructor(props){ 
     super(props); 
     this.state = { 
      message:'', 
      messageClass:'' 
     } 
     this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    getMeteorData(){ 
      let data = {}; 
      data.currentUser = Meteor.user(); 
      console.log('data',data); 
      return data; 
     } 

    render(){ 
     return(
      ) 
    } 
} 

相同混入是用於其他幾個組件。我正在跟隨用流星和reactjs構建社交網絡的教程。

+0

你也應該看看這篇文章https://medium.com/@dan_abramov/mixins-are-dead-long-live-higher-order-components -94a0d2f9e750#.jpbjhorfv –

回答

1
const ReactMeteorDataWrap = (BaseComponent)=>{ 
    return class ExportClass extends Component { 
     getMeteor(){ 
      //todo::some code to get Metor 
     } 
     render(){ 
      return <BaseComponent getMeteor={()=>this.getMeteor()} 
       {...this.props}></BaseComponent> 
     } 
    } 
} 

export default ReactMeteorDataWrap 

ü可以使用它像

class SignupForm extends Component { 
    constructor(props){ 
     super(props); 
     this.state = { 
      message:'', 
      messageClass:'' 
     } 
     this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    getMeteorData(){ 
      let data = {}; 
      data.currentUser = this.props.getMeteor().user(); 
      console.log('data',data); 
      return data; 
     } 

    render(){ 
     return(
      ) 
    } 
} 
export default ReactMeteorDataWrap(SignupForm) 
+0

如果我想調用這個SignupForm組件,我現在應該做什麼?我是否仍然可以使用從'../signup/SignupForm.jsx'中導入SignupForm來調用它;因爲現在使用導出默認的ReactMeteorDataWrap? – milan

+0

使用中沒有區別 –