2016-02-29 130 views
0

我使用ReactNative和Flux,並沒有遵循如何渲染另一個組件UserStore.addChangeListener(function(){});而不是Form。所以,我有一個登錄表單,如果登錄成功 - 我需要呈現NewsFeed。我如何做到這一點?在ReactNative中更新渲染的組件

import NewsFeed from './NewsFeed'; 

var Form = React.createClass({ 
    componentWillMount: function() { 
    UserStore.addChangeListener(function(){}); 
    }, 
    logIn: function() { 
    fetch(
     // ... 
    ); 
    }, 
    render: function() { 
    return (
     <View> 
     <TouchableHighlight onPress={this.logIn}> 
      Log In 
     </TouchableHighlight> 
     </View> 
    ); 
    } 
}); 

export default Form; 

UPD:

var Main = React.createClass({ 
    getInitialState: function() { 
    return { 
     loggedIn: false 
    } 
    }, 

    componentWillMount: function() { 
    UserStore.addChangeListener(function(){ 
     this.setState({ loggedIn: true }) 
    }); 
    }, 

    shouldComponentUpdate: function() { 
    return component = <NewsFeed />; 
    }, 

    render: function() { 
    var component = this.state.loggedIn ? <NewsFeed /> : <AuthForm />; 

    return (
     <View style={styles.container}> 
     { component } 
     </View> 
    ); 
    } 

}); 

回答

0

沒有能夠看到所有的代碼,這樣的事情或接近這個應該工作:

import NewsFeed from './NewsFeed'; 

var Form = React.createClass({ 

    getInitialState() { 
    return { 
     loggedIn: false 
    } 
    }, 

    componentWillMount() { 
    UserStore.addChangeListener((){}); 
    }, 

    logIn() { 
    fetch(
     // if login is successful 
     this.setState({ loggedIn: true }) 
    ); 
    }, 

    render() { 

    let newsfeed, button, { loggedIn } = this.state 

    if(loggedIn){ 
    newsfeed = <NewsFeed /> 
    } 

    if(!loggedIn) { 
    button = <TouchableHighlight onPress={this.logIn}> 
       Log In 
      </TouchableHighlight> 
    } 

    return (
     <View> 
     { button } 
     { newsfeed } 
     </View> 
    ); 
    } 
}); 

export default Form; 
+0

嗨!謝謝你的回答,但是'view'在狀態改變時不更新。 –

+0

你能更新你的代碼來反映這些變化嗎? –

+0

已更新代碼 –