我一直在努力将一个组件的值传递给另一个组件。这是从以前的问题,这个问题这是部分解决的延续:react-native tab navigator search box将本地传递道具反应到另一个组件
我使用的标签导航,这里是我的应用程序设置:
index.js(渲染选项卡设置)
路由器。 JS
searchHeader.js
tab1.js
标签2.js
等
在当标签被改变,我发现了标签的名称index.js。我想把它传递给searchHeader.js来更新占位符文本。
由于searchHeader.js没有导入到index.js而不是直接的孩子,我该如何传递它的值?
index.js
import React, { Component } from 'react';
import { Root, Tabs } from './config/router';
import { Alert,View } from 'react-native';
class App extends Component {
constructor(props) {
super(props);
this.state = {
searchText: '',
}
}
_getCurrentRouteName(navState) {
if (navState.hasOwnProperty('index')) {
this._getCurrentRouteName(navState.routes[navState.index])
} else {
if (navState.routeName==='One') {
this.setState({searchText:'Search One'})
}
if (navState.routeName==='Two') {
this.setState({searchText:'Search Two'})
}
if (navState.routeName==='Three') {
this.setState({searchText:'Search Three'})
}
if (navState.routeName==='Four') {
this.setState({searchText:'Search Four'})
}
}
}
render() {
return (
<Root onNavigationStateChange={(prevState, newState) => {
this._getCurrentRouteName(newState)
}} />
)
}
}
export default App;
router.js
...
export const Root = StackNavigator({
Tabs: {
screen: Tabs,
navigationOptions: {
header: <SearchHeader data={'Test'} />
}
},
}, {
mode: 'modal',
});
searchHeader.js
import React, { Component } from 'react';
import { View,Text,Dimensions,Alert } from 'react-native';
import { SearchBar } from 'react-native-elements';
class SearchHeader extends Component {
constructor(props) {
super(props);
this.state = {
placeholder: "Search One"
}
}
render() {
return (
<SearchBar
noIcon
containerStyle={{backgroundColor:'#fff'}}
inputStyle={{backgroundColor:'#e3e3e3',}}
lightTheme = {true}
round = {true}
placeholder={data}
placeholderTextColor = '#000'
/>
);
}
};
export default SearchHeader;
一个代码示例将有所帮助。 – jdv
已添加代码 –
您可以使用Mobx(https://mobx.js.org)或Redux等状态管理库。如果应用程序很简单,Redux可能会矫枉过正。 –