Передача параметров компонентам в реале
Я пытаюсь использовать общий компонент навигации, созданный в 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}></Button>}
rightButton={<Button style={styles.menuButton}></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}></Button>}
rightButton={<Button style={styles.menuButton}></Button>} />
);
}
};
По мере изменения цвета и названия setState заставит компонент повторно отобразить компонент с обновленным компонентом. Таким образом, его односторонняя привязка дает вам возможность двухсторонней привязки.
Ответ 3
Отрисовка - это непараметризированная функция, она не принимает никаких параметров. Поэтому для передачи параметров/значений из одного компонента в другой в React Native мы используем реквизиты. Реквизит - это объект JavaScript, который имеет свойство передавать один компонент другому.
Итак, вам нужно передать значения с помощью реквизита.