gpt4 book ai didi

javascript - 如何从外部 MeteorListView 文件调用 React-Native 导航器?

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:52 25 4
gpt4 key购买 nike

这可能更像是一个 JavaScript 问题,而不是一个 React-Native/Meteor 问题:我正在向现有的 React Native 应用程序添加 Meteor 连接,但遇到了导航障碍。我以前有一个 ListView,它每行提供一个 onPress 函数来调用导航。为了与 Meteor 的 createContainer 协议(protocol)保持一致,我(在我的例子中)使用了“PuzzlesContainer”来代替 ListView,在单独的文件中,它引用

const PuzzlesContainer = ({ puzzlesReady }) => {
return (
<Puzzles
puzzlesReady={puzzlesReady}
/>
);
};
export default createContainer(() => {
const handle = Meteor.subscribe('puzzles-list');
return {
puzzlesReady: handle.ready(),
};
}, PuzzlesContainer);

此文件包含“Puzzles”文件,该文件也是一个包含 MeteorListView 的 const 函数:

const Puzzles = ({ puzzlesReady }) => {
if (!puzzlesReady) {
return null;//<Loading />;
}else{

return (
<View style={launcherStyle.container}>
<MeteorListView
collection="puzzles"
renderRow={
(puzzle) =>
<View >
<TouchableHighlight style={launcherStyle.launcher} onPress={()=>onSelect(puzzle.text)}>
<Text style={launcherStyle.text}>{puzzle.text}</Text>
</TouchableHighlight>
</View>
. . .

我的问题是现在没有原始路由方案的上下文,所以当我调用时

this.props.navigator.push

它给出“未定义不是一个对象(评估'this.props.navigator')”。我该如何处理这个问题?

最佳答案

一种方法是查看新的 NavigationExperimental,它以 redux 方式处理 nagivator。

另一种方法是,尽管我不知道是否建议这样做,但通过将导航器组件分配给模块来全局化它。可以是这样的

// nav.js
let nav = null

export function setNav = _nav => nav = _nav

export function getNav = () => {
if (nav) {
return nav
} else {
throw "Nav not initialized error"
}
}

然后,当您第一次拿到导航器时,请执行以下操作

// component.js
import { Navigator } from 'react-native'
import { setNav } from './nav'

// ...
renderScene={ (route, navigator) => {
setNav(navigator)
// render scene below
// ...
}}

关于javascript - 如何从外部 MeteorListView 文件调用 React-Native 导航器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41155723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com