Skip to content

Commit c01801f

Browse files
committed
refactor: 优化node list渲染速度
1 parent 44f75e7 commit c01801f

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

src/helper/node.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ export interface TabNodeProps {
1414
}
1515

1616
export let TabNodes: TabNodeProps[] = [
17-
{ title: 'V2EX', parentNodeNames: ['v2ex'] },
1817
{ title: 'Life', parentNodeNames: ['life'] },
1918
{ title: 'Geek', parentNodeNames: ['geek'] },
2019
{ title: 'Programming', parentNodeNames: ['programming'] },
21-
{ title: 'Earth', parentNodeNames: ['cn', 'us'] }
20+
{ title: 'Earth', parentNodeNames: ['cn', 'us'] },
21+
{ title: 'V2EX', parentNodeNames: ['v2ex'] }
2222
]
2323

2424
export const nodeChildren = (rootNode: TabNodeProps): V2exObject.Node[] => {

src/screens/node/index.tsx

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,30 @@ import { TabNodes, nodeChildren } from '@src/helper/node'
1111
const Node = ({ route, navigation }: ScreenProps) => {
1212
const { theme } = useTheme()
1313

14-
const Item = ({ node }: { node: V2exObject.Node }) => (
15-
<TouchableOpacity
16-
style={styles.item(theme)}
17-
onPress={() => {
18-
NavigationService.goNodeTopics(node.name, node.title)
19-
}}>
20-
<Text style={SylCommon.Node.nodeTitle(theme)}>{node.title}</Text>
21-
</TouchableOpacity>
14+
const Item = ({ nodes }: { nodes: V2exObject.Node[] }) => (
15+
<View style={styles.listContainer(theme)}>
16+
{nodes.map((node) => (
17+
<TouchableOpacity
18+
key={node.name}
19+
style={styles.item(theme)}
20+
onPress={() => {
21+
NavigationService.goNodeTopics(node.name, node.title)
22+
}}>
23+
<Text style={SylCommon.Node.nodeTitle(theme)}>{node.title}</Text>
24+
</TouchableOpacity>
25+
))}
26+
</View>
2227
)
2328

2429
const sectionData = () => {
25-
return TabNodes.map((node) => ({
30+
return TabNodes.map((node, idx) => ({
2631
title: node.title,
27-
data: nodeChildren(node),
32+
data: [
33+
{
34+
name: 'children' + idx,
35+
list: nodeChildren(node)
36+
}
37+
],
2838
key: node.title
2939
}))
3040
}
@@ -34,9 +44,9 @@ const Node = ({ route, navigation }: ScreenProps) => {
3444
<View style={styles.container(theme)}>
3545
<SectionList
3646
sections={sectionData()}
37-
contentContainerStyle={styles.listContainer(theme)}
47+
contentContainerStyle={[]}
3848
keyExtractor={(item, index) => item.name + index}
39-
renderItem={({ item }) => <Item node={item} />}
49+
renderItem={({ item }) => <Item nodes={item.list} />}
4050
stickySectionHeadersEnabled={false}
4151
renderSectionHeader={({ section: { title } }) => (
4252
<View style={styles.section(theme)}>
@@ -59,7 +69,8 @@ const Node = ({ route, navigation }: ScreenProps) => {
5969
*/
6070
const styles = {
6171
container: (theme: ITheme): ViewStyle => ({
62-
width: theme.dimens.WINDOW_WIDTH - 40,
72+
width: theme.dimens.WINDOW_WIDTH,
73+
paddingLeft: theme.spacing.medium,
6374
flex: 1
6475
}),
6576
section: (theme: ITheme) => ({

0 commit comments

Comments
 (0)