React Native:在 Navigator Pop 上更改组件(文本)

Posted

技术标签:

【中文标题】React Native:在 Navigator Pop 上更改组件(文本)【英文标题】:React Native: Change Component (Text) on Navigator Pop 【发布时间】:2016-04-03 02:03:50 【问题描述】:

我正在创建一个组件/视图,其中包含可供选择的内容列表,类似于表格视图。

当我在视图 A 中时,我可以通过导航器推送跳转到该表格视图。一旦选择了一个项目,我就会弹出一个。但是,我希望使用适当的值更新视图 A 中的文本组件。

我正在考虑传递对这个文本组件的引用,但听起来不对。还有其他方法可以实现吗?

我找不到可以在这两个平台上使用的任何表格视图,如果您有任何好的建议,请告诉我。

【问题讨论】:

【参考方案1】:

实现这一点的 React 方法是将 callback 函数传递给命名属性,假设在本例中为 onSelect

MyParentComponent extends Component 
    ...
    MySelectHandler(value) 
        this.setState(
            valueSelected: value
        );
    ,
    ...

创建您的选择器组件:

<MyCustomTableView onSelect=this.MySelectHandler/>

在你的组件中:

MyCustomTableView extends Component 
    ...
    onValueSelected(value) 
        this.props.onSelect(value);
    
    ...

考虑到您的“重新渲染”问题,React 仅更新根据先前状态更改的组件。由于您的输入可能不依赖于状态,因此它们不会得到更新,因为它们没有任何变化。

如果您想在 valueSelected 键状态更新时清除所有输入,您可以使用生命周期方法 componentDidUpdate(),并在每次值更新后手动清除您的输入。

// In MyParentComponent
componentDidUpdate(prevProps, prevState) 
    if (prevState.valueSelected !== this.state.valueSelected)
        this.refs.myInput.value = ''; // Do this for each input, you'll need to add a unique ref attribute for each one

...

【讨论】:

【参考方案2】:

我通过将 this 作为道具传递给表格视图并在表格视图中调用 this.props.parent.setState(selection: selectedThing) 解决了这个问题。

我认为 setState 会重新渲染整个视图并摆脱任何用户输入,但它似乎只会重新渲染更改的组件

【讨论】:

以上是关于React Native:在 Navigator Pop 上更改组件(文本)的主要内容,如果未能解决你的问题,请参考以下文章

底部导航组件组件react-native-tab-navigator的使用

REACT NATIVE 系列教程之十一插件的安装使用与更新(示例:REACT-NATIVE-TAB-NAVIGATOR)

navigator.geolocation.getCurrentPosition() 方法在某些设备中返回位置请求超时 react-native

React Native:如何在 Navigator 的 navigationBar= 中引用当前路线?

React-Native组件之 Navigator和NavigatorIOS

如何在 react-native 中结合使用 Drawer Navigation 和 Stack Navigator?