2016-04-08 12 views
1

ログイン画面がアクティブな間、ツールバーのハンバーガーメニュー/位置アイコンを非表示にする必要があります。私が思うひとつの選択肢は、デフォルトでアイコンを空の文字列に設定することです。また、Login.js & Logout.jsのsuccessコールバック関数でEventEmitterを使用して、ツールバーコンポーネントでそれを待ち受けます。表示/非表示を決定するブールを送信する。これを行うより良い方法があるかどうかはわかりませんので、私は提案をしています。 Emit/Listenイベントは期待通りに機能します。問題は、変数を使用して空の文字列または名前付きアイコンを適用する方法です。反応するネイティブツールバーでアイコンを表示/非表示にする方法

ここにはツールバーコンポーネントがあります。

export default class Toolbar extends Component { 

    //noinspection JSUnusedGlobalSymbols 
    static contextTypes = { 
     navigator: PropTypes.object 
    }; 

    //noinspection JSUnusedGlobalSymbols 
    static propTypes = { 
     onIconPress: PropTypes.func.isRequired 
    }; 

    //noinspection JSUnusedGlobalSymbols 
    constructor(props) { 
     super(props); 
     this.state = { 
      title: AppStore.getState().routeName, 
      theme: AppStore.getState().theme, 
      menuIcon: '', 
      locationIcon: '' 
     }; 
    } 

    emitChangeMarket() { 
     AppEventEmitter.emit('onClickEnableNavigation'); 
    } 

    //noinspection JSUnusedGlobalSymbols 
    componentDidMount =() => { 
     AppStore.listen(this.handleAppStore); 
     AppEventEmitter.addListener('showIcons', this.showIcons.bind(this)); 
    }; 

    //noinspection JSUnusedGlobalSymbols 
    componentWillUnmount() { 
     AppStore.unlisten(this.handleAppStore); 
    } 

    handleAppStore = (store) => { 
     this.setState({ 
      title: store.routeName, 
      theme: store.theme 
     }); 
    }; 

    showIcons(val) { 
     if (val === true) { 
      this.setState({ 
       menuIcon: 'menu', 
       locationIcon: 'location-on' 
      }); 
     } else { 
      this.setState({ 
       menuIcon: '', 
       locationIcon: '' 
      }); 
     } 
    } 

    render() { 
     let menuIcon = this.state.menuIcon; 
     let locationIcon = this.state.locationIcon; 

     const {navigator} = this.context; 
     const {theme} = this.state; 
     const {onIconPress} = this.props; 

     return (
      <MaterialToolbar 
       title={navigator && navigator.currentRoute ? navigator.currentRoute.title : 'Metro Tracker Login'} 
       primary={theme} 
       icon={navigator && navigator.isChild ? 'keyboard-backspace' : {menuIcon}} 
       onIconPress={() => navigator && navigator.isChild ? navigator.back() : onIconPress()} 
       actions={[{ 
        icon: {locationIcon}, 
        onPress: this.emitChangeMarket.bind(this) 
       }]} 
       rightIconStyle={{ 
        margin: 10 
       }} 
      /> 
     ); 
    } 
} 

私が取得警告メッセージは次のとおりです。ツールバーに供給されたタイプのオブジェクトの

無効な小道具のアイコン、文字列を期待。

どのように変数の括弧で囲まれた文字列を渡すことができますか?

もっと簡単にどうすればツールバー全体を表示/非表示できますか?いずれかの方法で動作します。

答えて

1

menuIconlocationIcon周りのブラケットを削除してください:

... 
icon={navigator && navigator.isChild ? 'keyboard-backspace' : menuIcon} 
... 
    icon: locationIcon, 
... 
+0

はすでにそれを試してみました。このエラーが発生しました。「RawText」「明示的にコンポーネントにラップする必要があります。 – texas697

+0

私はreact-native-material-designのgithubコードに分割しました。この理由はありません。アイコンが空の文字列。どのラインとどのファイルが起こっていますか? – whitep4nther

関連する問題