React Native 与 Router v4 Match 标签给出组件未定义
React Native with Router v4 Match tag giving component undefined
我正在尝试基于此 link
Match
标签给我一个错误
React.createElement: type is invalid — expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it’s defined in. Check the render method of
组件可用,我什至尝试过显式创建组件。
完整代码
从 'react' 导入 React,{ 组件};
进口 {
应用注册,
样式表,
文本,
看法,
TouchableHighlight,
} 来自 'react-native';
import { Match, Miss, MemoryRouter as Router } from 'react-router';
const componentFactory = (routeName) => () => (
<View>
<Text style={styles.route}>{routeName}</Text>
</View>
)
const NavLink = ({to, children}, context) => {
const pressHandler = () => context.router.transitionTo(to);
return (
<TouchableHighlight onPress={pressHandler}>
{children}
</TouchableHighlight>
)
}
NavLink.contextTypes = {router: React.PropTypes.object}
export default class RR4Native extends Component {
render() {
return (
<Router>
<View style={styles.container}>
<View style={styles.routeContainer}>
<Match exactly pattern="/" component={componentFactory('Home')}/>
<Match pattern="/about" component={componentFactory('About')}/>
<Match pattern="/topics" component={componentFactory('Topics')}/>
<Miss component={componentFactory('Nope, nothing here')}/>
</View>
<View style={styles.container}>
<NavLink to="/">
<Text style={styles.routeLink}>
Home
</Text>
</NavLink>
<NavLink to="/about">
<Text style={styles.routeLink}>
About
</Text>
</NavLink>
<NavLink to="/topics">
<Text style={styles.routeLink}>
Topics
</Text>
</NavLink>
<NavLink to="/broken">
<Text style={styles.routeLink}>
Broken
</Text>
</NavLink>
</View>
</View>
</Router>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
route: {
color: '#701010',
fontSize: 40
},
routeLink: {
color: '#0000FF'
},
routeContainer: {
flex: 1,
justifyContent: 'center'
}
});
AppRegistry.registerComponent('RR4Native', () => RR4Native);
在 react-router
的最终版本中没有 Match
也没有 Miss
。你只需要使用 Route
。对于您的情况,您需要执行以下操作:
<View style={styles.routeContainer}>
<Switch>
<Route exact path="/" component={componentFactory('Home')}/>
<Route path="/about" component={componentFactory('About')}/>
<Route path="/topics" component={componentFactory('Topics')}/>
<Route component={componentFactory('Nope, nothing here')}/>
</Switch>
</View>
我正在尝试基于此 link
Match
标签给我一个错误
React.createElement: type is invalid — expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it’s defined in. Check the render method of
组件可用,我什至尝试过显式创建组件。
完整代码 从 'react' 导入 React,{ 组件}; 进口 { 应用注册, 样式表, 文本, 看法, TouchableHighlight, } 来自 'react-native'; import { Match, Miss, MemoryRouter as Router } from 'react-router';
const componentFactory = (routeName) => () => (
<View>
<Text style={styles.route}>{routeName}</Text>
</View>
)
const NavLink = ({to, children}, context) => {
const pressHandler = () => context.router.transitionTo(to);
return (
<TouchableHighlight onPress={pressHandler}>
{children}
</TouchableHighlight>
)
}
NavLink.contextTypes = {router: React.PropTypes.object}
export default class RR4Native extends Component {
render() {
return (
<Router>
<View style={styles.container}>
<View style={styles.routeContainer}>
<Match exactly pattern="/" component={componentFactory('Home')}/>
<Match pattern="/about" component={componentFactory('About')}/>
<Match pattern="/topics" component={componentFactory('Topics')}/>
<Miss component={componentFactory('Nope, nothing here')}/>
</View>
<View style={styles.container}>
<NavLink to="/">
<Text style={styles.routeLink}>
Home
</Text>
</NavLink>
<NavLink to="/about">
<Text style={styles.routeLink}>
About
</Text>
</NavLink>
<NavLink to="/topics">
<Text style={styles.routeLink}>
Topics
</Text>
</NavLink>
<NavLink to="/broken">
<Text style={styles.routeLink}>
Broken
</Text>
</NavLink>
</View>
</View>
</Router>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
route: {
color: '#701010',
fontSize: 40
},
routeLink: {
color: '#0000FF'
},
routeContainer: {
flex: 1,
justifyContent: 'center'
}
});
AppRegistry.registerComponent('RR4Native', () => RR4Native);
在 react-router
的最终版本中没有 Match
也没有 Miss
。你只需要使用 Route
。对于您的情况,您需要执行以下操作:
<View style={styles.routeContainer}>
<Switch>
<Route exact path="/" component={componentFactory('Home')}/>
<Route path="/about" component={componentFactory('About')}/>
<Route path="/topics" component={componentFactory('Topics')}/>
<Route component={componentFactory('Nope, nothing here')}/>
</Switch>
</View>