如何在不重新渲染的情况下附加 react-native 组件进行查看
How can I append react-native components to view without re-rendering?
最初,componentWillMount()
将对API
端点运行fetch()
,然后将javascript object
保存到redux存储中。
现在我的问题是,当涉及到渲染下一组组件时,它会重新渲染所有组件(这意味着由于渲染,屏幕上有一点闪光)。
所以基本上onScroll
过了某个点,它将运行相同的fetch()
api 调用并获取一个新的 JavaScript 对象列表。然后,它从redux存储中获取数据,并通过它循环,将每个新的postComponent附加到布局状态。
handleScroll (event: Object) {
const offset = event.nativeEvent.contentOffset.y;
const screenHeight = Dimensions.get('window').height;
// Just for dev purposes until I find a proper way of determining half way down screen
if(offset >= screenHeight/2){
console.log("Halfway past...");
this.props.FeedActions.fetchFeed(this.props.feed.nextUrl, true);
}
}
render() {
var feed = this.props.feed;
if (!_.has(feed, 'posts')) {
return <ActivityIndicatorIOS />;
}
// Append more posts to state
for (var i = 0; i < _.size(feed.posts); i++) {
this.state.postComponents.push(
<PostComponent post={ feed.posts[i] } key={ "post_"+feed.posts[i].postId+Math.random() }/>
);
}
return (
<ScrollView key={Math.random()} onScroll={this.handleScroll.bind(this)}>
{ this.state.postComponents }
</ScrollView>
)
}
};
有没有办法解决这个问题?我以为 react 不会重新渲染已经渲染的组件,只会重新渲染那些被更改的组件?但我想在这种情况下,我的组件都是动态的,这意味着它们将被重新渲染。
问题在于您如何创建密钥。你想要的是一个键,它一致地唯一标识该特定节点,并且不会更改每个渲染。由于您使用Math.random()
作为密钥的一部分,因此每次渲染都会更改密钥,因此 react 会重建该节点。尝试使用 postId,不要使用随机数尾随它。
相关文章:
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 如何在不使用JSX的情况下在React Native中制作组件
- 访问要在 React Native Text 组件中显示的对象数组
- React Native:将id设置为一个组件并获取该组件's的id
- React组件与Native Mobile(iOS或Android)的通信
- 如何通过React Native中的组件共享登录状态
- 在React Native中批量创建组件
- React Native:检查组件是否返回到
- React Native Android 原生 UI 组件中的自定义事件
- React Native:创建组件错误
- 如何在不重新渲染的情况下附加 react-native 组件进行查看
- React Native:通过 setState 更新 ListView 数据源是否会重新渲染整个组件
- React-Native:ScrollView,refs和自定义组件
- 如何在React Native中使用Navigator对正在转换为的组件调用方法
- React Native:如何在不使用NavigatorIOS组件的情况下切换页面
- 对React Native中从父组件传下来的props数组进行更改
- React Native appending Text组件位于另一个Text组件内部
- 将参数传递给React Native中的组件
- 如何使用react native处理视图组件的无显示和块显示
- 如何在react native中获取组件的大小