2017-07-18 3 views
0

React Nativeの非常に新しいです。React Native - コンポーネントがビューを受け入れて表示するようにします。

私のプロジェクトでは、次のような要件があります。

私はComponentというBaseComponentという名前のビューをプロップとして受け取り、それをレンダリングメソッドでタッチ可能なハイライト内に表示します。

CustomComponentで私はこのBaseComponentを使用しています。ビューを小道具として渡します。これは、getView()という関数から渡されているViewが返されます。しかし、それは私に空白の画面を表示しています。

// BaseComponent.js 

import React, { Component } from 'react' 
import { 
    View, 
    TouchableHighlight 
} from 'react-native' 

export default class BaseComponent extends Component { 

    render() { 
    return(
     <TouchableHighlight onPress= { this.onPress.bind(this) } > 

      <View> 
      { 
       this.props.contentView 
      } 
      </View> 

     </TouchableHighlight> 
    ); 
    } 
} 

-

// CustomComponent.js 

import React, { Component } from 'react' 
import { Text } from 'react-native' 
import BaseComponent from './BaseComponent' 

export default class CustomComponent extends Component { 

    getView() { 
    return(
     <Text> Hello { this.props.name }! </Text> 
    ) 
    } 

    render() { 
    <BaseComponent contentView={ this.getView.bind(this) }> 
    } 
} 

答えて

0

私はちょうどのようにあなたのコードを編集:

私のエミュレータで
// BaseComponent.js 

import React, { Component } from 'react'; 
import { View, TouchableHighlight, Text } from 'react-native'; 

export default class BaseComponent extends Component { 
    render() { 
    return (
     <TouchableHighlight onPress={null}> 

     <View> 
      <Text> hello </Text> 
     </View> 

     </TouchableHighlight> 
    ); 
    } 
} 

そして...

// CustomComponent.js 

import React, { Component } from 'react'; 
import { Text, View } from 'react-native'; 
import BaseComponent from './BaseComponent'; 

export default class routerFlax extends Component { 
    getView() { 
    return <Text> Hello {this.props.name}! </Text>; 
    } 

    render() { 
    return <BaseComponent contentView={this.getView.bind(this)} />; 
    } 
} 

のように示すコードを

enter image description here

問題は、あなたが小道具のnullを渡し、コンポーネントレンダリングを返さないということです。結果は空白になります。

編集#1

あなたの問題についてコメントをもとに、私はあなただけの変更だと思う:

<BaseComponent contentView={this.getView.bind(this)} />; 

のように示すコード私のエミュレータで

<BaseComponent contentView={this.getView()} />; 

へ:

new answer

お返事お願いします。ありがとう:)

+0

お返事ありがとうございます!残念ながら、これは私が探しているものではありません。私が必要とするのは、BaseComponentの小道具としてビューを渡して、そのreturnメソッド内でレンダリングできるようにする必要があるということです。この回答はその問題を解決するのに役立つものではありません。 : –

+0

oh ..申し訳ありません..私の答えを編集します。私はあなたの質問に答えて欲しいと思っています:) – muhammadaa

+0

ありがとうございました!これはうまくいった。奇妙なことは私が前にこれを試したことです。しかし何らかの理由で動かなかった。しかし、今回はうまくいった! :) –

関連する問題