Передача параметров компонентам в реале

Я пытаюсь использовать общий компонент навигации, созданный в React-Native. В момент вызова я хочу установить оттенок навигационной панели, название и т.д.

Nav Bar Code:

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"/>

Как это сделать правильно? Спасибо заранее.

Ответы

Ответ 1

Во-первых, render не принимает никаких параметров, то, что вы хотите сделать, это ссылка на ваши реквизиты, которые вы передали.

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

Просто выполняя это, каждый раз, когда ваш NavigationBar rerenders будет таким же компонентом 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);

Ответ 2

Вы можете вызвать компонент панели навигации и предоставить реквизиты, подобные этому

<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 заставит компонент повторно отобразить компонент с обновленным компонентом. Таким образом, его односторонняя привязка дает вам возможность двухсторонней привязки.

Ответ 3

Отрисовка - это непараметризированная функция, она не принимает никаких параметров. Поэтому для передачи параметров/значений из одного компонента в другой в React Native мы используем реквизиты. Реквизит - это объект JavaScript, который имеет свойство передавать один компонент другому. Итак, вам нужно передать значения с помощью реквизита.