그래서 가게의 상태에 따라가 TabNavigator의 스타일을 시도하고있다 :탐색 반응 : 변화가 TabNavigator 스타일 REDUX 저장소를 기반으로
import React from 'react';
import { connect } from 'react-redux';
import { TabNavigator } from 'react-navigation';
const Tabs = TabNavigator(
// Screens
{
Boards: {
screen: Boards,
navigationOptions: {
tabBarLabel: 'Boards',
tabBarIcon:() => <MaterialCommunityIcon name="bulletin-board" size={25} color="white" />,
},
},
Bookmarks: {
screen: Bookmarks,
navigationOptions: {
tabBarLabel: 'Bookmarks',
tabBarIcon:() => <EntypoIcon name="bookmarks" size={25} color="white" />,
},
},
Settings: {
screen: Settings,
navigationOptions: {
tabBarLabel: 'Settings',
tabBarIcon:() => <MaterialCommunityIcon name="settings" size={25} color="white" />,
},
},
},
// TabNavigator configuration
{
tabBarPosition: 'bottom',
tabBarOptions: {
showIcon: true,
showLabel: false,
renderIndicator:() => null,
style: {
// TODO: Make tabNavigation color change based on current selected theme.
backgroundColor: this.props.theme === 'default' ? 'black' : 'red',
},
},
},
);
const mapStateToProps = state => {
return {
theme: state.configuration.theme,
};
};
export default connect(mapStateToProps)(Tabs);
을하지만 this.props.theme를 사용하려고하면 내가 얻을 : undefined is not an object (evaluating 'this.props.theme')
tabNavigator가 소품이나 그와 비슷한 것을 받아들이지 않기 때문에 tabNavigator를 redux 상점에 연결할 수 없기 때문에 이런 일이 일어난다는 것을 알 수 있습니다. 그래서 어떻게 할 수 있습니까?
편집 한
이 위에서 제시 한 방법으로 사용자 정의 탭 표시 줄을 사용하여 해결하기 위해 노력 후,이 오류가 팝업 :
그리고 코드 :
을 TabBar.js
import React from 'react';
import { connect } from 'react-redux';
import { TabBarBottom } from 'react-navigation';
const TabBar = ({ theme }) => (
<TabBarBottom style={{ backgroundColor: theme === 'dark' ? 'black' : 'red' }} />
);
const mapStateToProps = state => ({
theme: state.configuration.theme,
});
export default connect(mapStateToProps)(TabBar);
router.js
import { TabNavigator } from 'react-navigation';
import TabBar from './components/TabBar';
import Boards from './screens/Boards';
import Settings from './screens/Settings';
import Bookmarks from './screens/Bookmarks';
const Tabs = TabNavigator(
// Screens
{
Boards: {
screen: Boards,
navigationOptions: {
tabBarLabel: 'Boards',
tabBarIcon:() => <MaterialCommunityIcon name="bulletin-board" size={25} color="white" />,
},
},
Bookmarks: {
screen: Bookmarks,
navigationOptions: {
tabBarLabel: 'Bookmarks',
tabBarIcon:() => <EntypoIcon name="bookmarks" size={25} color="white" />,
},
},
Settings: {
screen: Settings,
navigationOptions: {
tabBarLabel: 'Settings',
tabBarIcon:() => <MaterialCommunityIcon name="settings" size={25} color="white" />,
},
},
},
// TabNavigator configuration
{
tabBarPosition: 'bottom',
tabBarComponent: TabBar,
},
);
export default Tabs;
자체 탭 모음 구성 요소를 사용하여 Redux까지 연결할 수 있습니다. 그런 다음 해당 구성 요소를 탐색기의 막대로 사용하십시오. – Kraylog
필자는 그것을 생각했지만 프리젠 테이션 구성 요소를 리펙스 스토어에 연결하는 것은 나쁜 습관이 아니 었습니까? 그게 아니라면 어떻게해야합니까? 시도했지만 작동하지 않았습니다. –