web-dev-qa-db-ja.com

React Nativeでコンポーネントにパラメーターを渡す

React-Nativeで作成した一般的なナビゲーションコンポーネントを使用しようとしています。呼び出しの時点で、ナビゲーションバーの色合い、タイトルなどを設定します。

ナビゲーションバーコード:

var NavigationBar = React.createClass({
    render: function(title, titleColor, NavBarColor) {
        var titleConfig = {
            title: title,
            tintColor: titleColor,
        };

        return (
            <NavBar
                title={titleConfig}
                tintColor={NavBarColor}
                leftButton={<Button style={styles.menuButton}>&#xf0c9;</Button>}
                rightButton={<Button style={styles.menuButton}>&#xf07a;</Button>} />
        );
    }
});

別のページに適用する:

<NavigationBar title="Categories" titleColor="#ffffff" NavBarColor="#f0b210"/>

これを適切に行う方法は?前もって感謝します。

19
Nimila Hiranya

最初にrenderはパラメーターを取りません。あなたがやりたいことは、渡した小道具を参照することです。

render: function () {
  var titleConfig = {
      title: this.props.title,
      tintColor: this.props.titleColor
  };  
  // Rest of code
}

これを行うだけで、NavigationBarが再レンダリングされるたびに、NavBarコンポーネントも再レンダリングされます。

これを示す非常に簡単な例

var NavBar = React.createClass({
  render: function () {
    return <div id="navbar" style={{backgroundColor: this.props.tintColor}}>
    <h1 style={{color: this.props.title.tintColor}}>{this.props.title.title}</h1>
    </div>;
  }
});

var NavigationBar = React.createClass({
    render: function() {
        var titleConfig = {
            title: this.props.title,
            tintColor: this.props.titleColor,
        };

        return (
            <NavBar
                title={titleConfig}
                tintColor={this.props.NavBarColor}
                />
        );
    }
});


React.render(<NavigationBar title="Categories" titleColor="#ff0" NavBarColor="#f0b210" />, document.body);
26

ナビゲーションバーコンポーネントを呼び出して、このような小道具を与えることができます

<NavigationBar title="Hello World" tintColor= "blue" />

NavigationBarの宣言では、次のように使用できます

class NavigationBar extends React.Component{
    constructor(props){
     super(props);
        this.state={
           NavTitle:"",
          NavColor:""

         };
      }
    componentDidMount(){
        this.setState({
            NavTitle: this.props.title,
            NavColor:this.props.tintColor
        });
    }
  componentWillRecieveProps(nextProps,nextState){
    this.setState({
     NavTitle:nextProps["title"],
      NavColor:nextProps["tintColor"]
     });

    }
    shouldComponentUpdate(nextProps,nextState){
       // your condition if you want to re-render every time on props change
     return true;
    }
    render() {
        return (
            <NavBar
            title=this.state.NavTitle
            tintColor=this.state.NavColor
            leftButton={<Button style={styles.menuButton}>&#xf0c9;</Button>}
            rightButton={<Button style={styles.menuButton}>&#xf07a;</Button>} />
        );
    }
};

色とタイトルが変更されると、setStateはコンポーネントに更新されたコンポーネントを使用してコンポーネントを強制的に再レン​​ダリングします。

5

renderはパラメータ化されていない関数であり、パラメータを取りません。 React Nativeでパラメーター/値を1つのコンポーネントから別のコンポーネントに渡すには、propsを使用します。propsは、プロパティを持つJavaScriptオブジェクトですあるコンポーネントから他のコンポーネントに渡すため、propsで値を渡す必要があります。

0
iPragmatech