@conecli/cone-render 0.10.1-shop3.71 → 0.10.1-shop3.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import React from 'react'
2
1
  const {
3
2
  floorData,
4
3
  renderSourceType = BUSINESS_TYPE.ONLINE,
5
4
  builtInComponents = {},
6
5
  } = props
7
6
  const isDevMode = renderSourceType === BUSINESS_TYPE.DECORATE
8
7
  const specificModuleFlag = ['mHeaderVideo']
9
8
  const frontEndSpecificModuleFlag = ['header_mVideo']
10
9
  const luxuryContainerPosition = 'luxuryFixed'
11
10
  const floorPosition = floorData?.floorPosition
12
11
  let floorModuleType: any = floorData?.floorExtInfo?.moduleFlag
13
12
  specificModuleFlag.includes(floorModuleType) &&
14
13
  floorPosition === luxuryContainerPosition &&
15
14
  (floorModuleType = frontEndSpecificModuleFlag)
16
15
  const FloorContentItem =
17
16
  (floorModuleType && builtInComponents[floorModuleType]) || null
18
17
  const dataDefines = getFloorDataToDataDefines(floorData)
19
18
 
20
19
  const renderDecorateDefaultModule = () => {
21
20
  return (
22
21
  <View
23
22
  style={{
24
23
  lineHeight: '120px',
25
24
  textAlign: 'center',
26
25
  }}
27
26
  >
28
27
  当前模块是{floorData.moduleName}
29
28
  </View>
30
29
  )
31
30
  }
32
31
  if (
33
32
  floorModuleType &&
34
33
  (RemoteLoadFloorList.includes(floorModuleType) ||
35
34
  floorData?.floorExtInfo?.floorLoadWay === 2)
36
35
  ) {
37
36
  return (
38
37
  <RemoteFloorItem {...props} dataDefines={dataDefines}></RemoteFloorItem>
39
38
  )
40
39
  } else {
41
40
  return FloorContentItem ? (
42
41
  <ErrorBoundary {...props}>
43
42
  <FloorContentItem {...props} dataDefines={dataDefines} />
44
43
  </ErrorBoundary>
45
44
  ) : isDevMode ? (
46
45
  renderDecorateDefaultModule()
47
46
  ) : null
48
47
  }
49
48
  switch (moduleId) {
50
49
  case 83158:
51
50
  return 'freeLayout'
52
51
  case 99654:
53
52
  return 'activeText'
54
53
  case 100382:
55
54
  return 'superGoods'
56
55
  }
57
56
  floorList.map((item) => {
58
57
  if (!item.floorExtInfo) {
59
58
  return null
60
59
  }
61
60
  const moduleFlag = item.floorExtInfo.moduleFlag
62
61
  if (!moduleFlag) {
63
62
  const newModuleFlag = moduleId2ModuleFlag(item.moduleId)
64
63
  if (newModuleFlag) {
65
64
  item.floorExtInfo.moduleFlag = newModuleFlag
66
65
  }
67
66
  }
68
67
  })
68
+ import React, { memo, useMemo } from 'react';
69
69
  const {
70
70
  floorData,
71
71
  renderSourceType = BUSINESS_TYPE.ONLINE,
72
72
  builtInComponents = {},
73
73
  } = props;
74
74
  const isDevMode = renderSourceType === BUSINESS_TYPE.DECORATE;
75
75
  const specificModuleFlag = ['mHeaderVideo'];
76
76
  const frontEndSpecificModuleFlag = ['header_mVideo'];
77
77
  const luxuryContainerPosition = 'luxuryFixed';
78
78
  const floorPosition = floorData?.floorPosition;
79
79
  let floorModuleType: any = floorData?.floorExtInfo?.moduleFlag;
80
80
  specificModuleFlag.includes(floorModuleType) &&
81
81
  floorPosition === luxuryContainerPosition &&
82
82
  (floorModuleType = frontEndSpecificModuleFlag);
83
83
  const FloorContentItem = (floorModuleType && builtInComponents[floorModuleType]) || null;
84
84
  const dataDefines = useMemo(() => {
85
85
  return getFloorDataToDataDefines(floorData);
86
86
  }, [floorData]);
87
87
 
88
88
  const renderDecorateDefaultModule = () => {
89
89
  return (
90
90
  <View
91
91
  style={{
92
92
  lineHeight: '120px',
93
93
  textAlign: 'center',
94
94
  }}
95
95
  >
96
96
  当前模块是{floorData.moduleName}
97
97
  </View>
98
98
  );
99
99
  };
100
100
  if (
101
101
  floorModuleType &&
102
102
  (RemoteLoadFloorList.includes(floorModuleType) || floorData?.floorExtInfo?.floorLoadWay === 2)
103
103
  ) {
104
104
  return <RemoteFloorItem {...props} dataDefines={dataDefines}></RemoteFloorItem>;
105
105
  } else {
106
106
  return FloorContentItem ? (
107
107
  <ErrorBoundary {...props}>
108
108
  <FloorContentItem {...props} dataDefines={dataDefines} />
109
109
  </ErrorBoundary>
110
110
  ) : isDevMode ? (
111
111
  renderDecorateDefaultModule()
112
112
  ) : null;
113
113
  }
114
114
  switch (moduleId) {
115
115
  case 83158:
116
116
  return 'freeLayout';
117
117
  case 99654:
118
118
  return 'activeText';
119
119
  case 100382:
120
120
  return 'superGoods';
121
121
  }
122
122
  floorList.map((item) => {
123
123
  if (!item.floorExtInfo) {
124
124
  return null;
125
125
  }
126
126
  const moduleFlag = item.floorExtInfo.moduleFlag;
127
127
  if (!moduleFlag) {
128
128
  const newModuleFlag = moduleId2ModuleFlag(item.moduleId);
129
129
  if (newModuleFlag) {
130
130
  item.floorExtInfo.moduleFlag = newModuleFlag;
131
131
  }
132
132
  }
133
133
  });
134
134
  if (nextProps.source !== 'appView') return false;
135
135
  return (
136
136
  prevProps.floorData === nextProps.floorData &&
137
137
  prevProps.extendInfoData === nextProps.extendInfoData
138
138
  );
@@ -1 +1 @@
1
- import React, { useCallback } from 'react'
2
1
  const {
3
2
  style,
4
3
  dataDefines,
5
4
  containerBorderRadius,
6
5
  floorData,
7
6
  isRealTimeRender,
8
7
  forceRenderTime,
9
8
  } = props
10
9
  const getRenderRealTimeKeyObj = {
11
10
  key: isRealTimeRender ? Date.now() : forceRenderTime,
12
11
  }
13
12
  console.log('远程加载楼层渲染key信息', getRenderRealTimeKeyObj)
14
13
  return (
15
14
  <View className={floorStyle['wrap']} style={style}>
16
15
  {floorData?.showCommonFloorHead === false ? null : (
17
16
  <CommonFloorHead
18
17
  dataDefines={dataDefines}
19
18
  floorData={floorData}
20
19
  {...getRenderRealTimeKeyObj}
21
20
  />
22
21
  )}
23
22
  <View
24
23
  className={floorStyle['wrap']}
25
24
  style={
26
25
  typeof containerBorderRadius === 'number'
27
26
  ? {
28
27
  borderRadius: containerBorderRadius + 'px',
29
28
  }
30
29
  : containerBorderRadius
31
30
  }
32
31
  >
33
32
  {}
34
33
  {props.children &&
35
34
  React.cloneElement(props.children, {
36
35
  dataDefines: dataDefines,
37
36
  ...getRenderRealTimeKeyObj,
38
37
  })}
39
38
  </View>
40
39
  </View>
41
40
  )
42
41
  isRealTimeRender: false,
43
42
  forceRenderTime: 1,
43
+ import React, { useState, useMemo, useRef, useCallback } from 'react';
44
44
  const {
45
45
  style,
46
46
  dataDefines,
47
47
  containerBorderRadius,
48
48
  floorData,
49
49
  isRealTimeRender,
50
50
  forceRenderTime,
51
51
  containerIndex = 0,
52
52
  } = props;
53
53
  const domRef = useRef<HTMLDivElement>(null);
54
54
  const [wrapperHeight, setWrapperHeight] = useState<number | string>('auto');
55
55
  const hasBeenInViewRef = useRef(false);
56
56
 
57
57
  const handleInViewCallback = useCallback(() => {
58
58
  if (!hasBeenInViewRef.current) {
59
59
  hasBeenInViewRef.current = true;
60
60
  setWrapperHeight('auto');
61
61
  }
62
62
  }, [containerIndex]);
63
63
 
64
64
  const handleOutViewCallback = useCallback(() => {
65
65
  if (hasBeenInViewRef.current && domRef.current) {
66
66
  hasBeenInViewRef.current = false;
67
67
  const height = domRef.current.getBoundingClientRect().height;
68
68
  if (height > 0) {
69
69
  setWrapperHeight(height);
70
70
  }
71
71
  }
72
72
  }, [containerIndex]);
73
73
  const getRenderRealTimeKeyObj = useMemo(() => {
74
74
  return {
75
75
  key: isRealTimeRender ? Date.now() : forceRenderTime,
76
76
  };
77
77
  }, [isRealTimeRender, forceRenderTime]);
78
78
  const innerStyle = useMemo(() => {
79
79
  const baseStyle = style || {};
80
80
  let borderRadius = {};
81
81
  if (typeof containerBorderRadius === 'number') {
82
82
  borderRadius = { borderRadius: containerBorderRadius + 'px' };
83
83
  } else if (containerBorderRadius && typeof containerBorderRadius === 'object') {
84
84
  borderRadius = containerBorderRadius;
85
85
  }
86
86
  if (typeof wrapperHeight === 'number') {
87
87
  return {
88
88
  ...baseStyle,
89
89
  ...borderRadius,
90
90
  height: `${wrapperHeight}px`,
91
91
  overflow: 'hidden',
92
92
  contentVisibility: 'auto',
93
93
  containIntrinsicSize: `${wrapperHeight}px`,
94
94
  };
95
95
  }
96
96
  return { ...baseStyle, ...borderRadius };
97
97
  }, [containerBorderRadius, wrapperHeight]);
98
98
  return (
99
99
  <InOrOutViewObserver
100
100
  inViewCallback={handleInViewCallback}
101
101
  outViewCallback={handleOutViewCallback}
102
102
  threshold={0}
103
103
  >
104
104
  <View ref={domRef} style={innerStyle} className={floorStyle['wrap']}>
105
105
  {floorData?.showCommonFloorHead === false ? null : (
106
106
  <CommonFloorHead
107
107
  dataDefines={dataDefines}
108
108
  floorData={floorData}
109
109
  {...getRenderRealTimeKeyObj}
110
110
  />
111
111
  )}
112
112
  {props.children &&
113
113
  React.cloneElement(props.children, {
114
114
  dataDefines: dataDefines,
115
115
  ...getRenderRealTimeKeyObj,
116
116
  })}
117
117
  </View>
118
118
  </InOrOutViewObserver>
119
119
  );
120
120
  isRealTimeRender: false,
121
121
  forceRenderTime: 1,
@@ -1 +1 @@
1
- import Taro from '@tarojs/taro'
2
1
  getBundleUrl,
3
2
  getBundleFileName,
4
3
  formatPackResult,
5
4
  getTaroVersion
6
5
  const { floorData, renderSourceType, updateContainerFloorListDataFn } = props
7
6
  const dataDefines = getFloorDataToDataDefines(floorData)
8
7
  const [forceRenderTime,setForceRenderTime] = useState(1)
9
8
  useEffect(() => {
10
9
  isJdAndAndroidDevice && Taro.eventCenter.on(TaroEventType.FORCE_UPDATE_PAGE_LAYOUT, (_result) => {
11
10
  setForceRenderTime(Date.now())
12
11
  })
13
12
  return () => {
14
13
  isJdAndAndroidDevice && Taro.eventCenter.off(TaroEventType.FORCE_UPDATE_PAGE_LAYOUT)
15
14
  }
16
15
  },[])
17
16
 
18
17
  const getFloorSetHeight = (item) => {
19
18
  const getHeight = item?.floorExtInfo?.floorHeight
20
19
  ? Number(item?.floorExtInfo?.floorHeight)
21
20
  : 200
22
21
  return getHeight > 0 ? getHeight : 200
23
22
  }
24
23
  console.log(
25
24
  '>>>>>>>>>> floorModuleType === FloorModuleType.ISVDESIGNERH5MODULE >>>>>>>>>>',
26
25
  )
27
26
  const renderResult = (() => {
28
27
  try {
29
28
  console.log('>>>>>>>>>> 开始渲染1个isv模块 >>>>>>>>>>')
30
29
  console.log(
31
30
  '==========当前业务类型renderSourceType、楼层floorId: ',
32
31
  renderSourceType,
33
32
  floorData.uid,
34
33
  )
35
34
  const modularPackResult = floorData?.floorExtInfo?.modularPackResult
36
35
  const modularPackResultObj = formatPackResult(modularPackResult)
37
36
  const bundleUrl = getBundleUrl(modularPackResultObj)
38
37
  const bundleFileName = getBundleFileName(modularPackResultObj)
39
38
  const taroVersion = getTaroVersion(modularPackResultObj)
40
39
  const opt = {
41
40
  msg: `店铺h5楼层隐藏不显示。原因:模块数据不完备,楼层过滤。`,
42
41
  floorIdx: floorData?.floorIdx,
43
42
  uid: floorData?.uid,
44
43
  shopId: floorData?.floorExtInfo?.shopId,
45
44
  moduleId: floorData?.moduleId,
46
45
  moduleDesignerType: floorData?.floorExtInfo?.moduleDesignerType,
47
46
  floorLoadWay: floorData?.floorExtInfo?.floorLoadWay,
48
47
  floorKind: floorData?.floorExtInfo?.floorKind,
49
48
  middleTemplateId: floorData?.middleTemplateId,
50
49
  modularPackResult: {
51
50
  bundleUrl,
52
51
  taroVersion
53
52
  }
54
53
  }
55
54
  if (bundleUrl && bundleFileName) {
56
55
  let ISVModule =
57
56
  taroJdBaseInfo?.renderedIsvComponents[
58
57
  `${floorData.uid}_${bundleFileName}`
59
58
  ] || null
60
59
  if (!ISVModule) {
61
60
  ISVModule = lazy(() => import(bundleFileName + '@@@@@@' + bundleUrl))
62
61
  console.log(
63
62
  '1|加载isv模块==========走lazy import生成新的isv模块react组件',
64
63
  bundleFileName,
65
64
  )
66
65
  taroJdBaseInfo.renderedIsvComponents[
67
66
  `${floorData.uid}_${bundleFileName}`
68
67
  ] = ISVModule
69
68
  console.log(
70
69
  '2|渲染isv模块的react组件==========,window.taroJshopH5WebpackJsonp上的组件是否已就绪: ',
71
70
  bundleFileName,
72
71
  window['taroJshopH5WebpackJsonp'].find(
73
72
  (item) => item[0][0] == bundleFileName,
74
73
  ),
75
74
  )
76
75
  } else {
77
76
  console.log(
78
77
  '1|加载isv模块==========不走lazy import生成新的isv模块react组件,从已加载中获取,taroJdBaseInfo: ',
79
78
  taroJdBaseInfo,
80
79
  )
81
80
  console.log(
82
81
  '2|渲染isv模块的react组件==========,taroJdBaseInfo.renderedIsvComponents上的组件是否已就绪: ',
83
82
  taroJdBaseInfo.renderedIsvComponents[
84
83
  `${floorData.uid}_${bundleFileName}`
85
84
  ],
86
85
  )
87
86
  }
88
87
  const _floorHeight = getFloorSetHeight(floorData)
89
88
  return (
90
89
  <ErrorBoundary {...props}>
91
90
  <Suspense
92
91
  fallback={
93
92
  <View
94
93
  style={{
95
94
  position: 'relative',
96
95
  background: `#ffffff url('${JD_PLACEHOLDER_IMG}') center center no-repeat`,
97
96
  height: `${_floorHeight}px`,
98
97
  }}
99
98
  ></View>
100
99
  }
101
100
  >
102
101
  <ISVFloor {...props} dataDefines={dataDefines} forceRenderTime={forceRenderTime} isRealTimeRender={realTimerRenderTypeList.includes(taroJdBaseInfo.info.pageInfo.dataType)}>
103
102
  <ISVModule {...props} dataDefines={dataDefines}></ISVModule>
104
103
  </ISVFloor>
105
104
  </Suspense>
106
105
  </ErrorBoundary>
107
106
  )
108
107
  } else {
109
108
  console.log(
110
109
  '3|isv模块渲染异常,modularPackResult中缺少bundleUrl或bundleFileName==========modularPackResult: ',
111
110
  modularPackResultObj,
112
111
  )
113
112
  draBusinessCustomReport({
114
113
  eventName: 'business',
115
114
  errorName: getSgmCustomCode(handleSgmCodeTaroVersion(floorData?.floorExtInfo?.floorKind === FLOOR_KIND.PDC_SYSTEM_MODULE ? SgmCustomCode.SYSTEMPDCMODULE_DATA : SgmCustomCode.REMOTEMODULE_DATA)),
116
115
  errorMessage: '店铺h5楼层隐藏不显示。原因:模块数据不完备,楼层过滤。',
117
116
  extraData: JSON.stringify(opt),
118
117
  })
119
118
  return null
120
119
  }
121
120
  } catch (err) {
122
121
  console.log('3|isv模块渲染异常,floorItem逻辑错误==========err: ', err)
123
122
  return null
124
123
  }
125
124
  })()
126
125
  if (renderResult === null) {
127
126
  updateContainerFloorListDataFn &&
128
127
  updateContainerFloorListDataFn({
129
128
  type: 'filter',
130
129
  containerId: floorData?.uid,
131
130
  })
132
131
  console.log('renderResult === null: 命中了!')
133
132
  taroEventSendPageScrollInfo()
134
133
  } else {
135
134
  console.log('renderResult !== null: 没命中', renderResult)
136
135
  }
137
136
  return renderResult
137
+ import Taro from '@tarojs/taro';
138
138
  getBundleUrl,
139
139
  getBundleFileName,
140
140
  formatPackResult,
141
141
  getTaroVersion,
142
142
  const { floorData, renderSourceType, updateContainerFloorListDataFn } = props;
143
143
  const dataDefines = getFloorDataToDataDefines(floorData);
144
144
  const [forceRenderTime, setForceRenderTime] = useState(1);
145
145
  useEffect(() => {
146
146
  isJdAndAndroidDevice &&
147
147
  Taro.eventCenter.on(TaroEventType.FORCE_UPDATE_PAGE_LAYOUT, (_result) => {
148
148
  setForceRenderTime(Date.now());
149
149
  });
150
150
  return () => {
151
151
  isJdAndAndroidDevice && Taro.eventCenter.off(TaroEventType.FORCE_UPDATE_PAGE_LAYOUT);
152
152
  };
153
153
  }, []);
154
154
 
155
155
  const getFloorSetHeight = (item) => {
156
156
  const getHeight = item?.floorExtInfo?.floorHeight
157
157
  ? Number(item?.floorExtInfo?.floorHeight)
158
158
  : 200;
159
159
  return getHeight > 0 ? getHeight : 200;
160
160
  };
161
161
  console.log('>>>>>>>>>> floorModuleType === FloorModuleType.ISVDESIGNERH5MODULE >>>>>>>>>>');
162
162
  const renderResult = (() => {
163
163
  try {
164
164
  console.log('>>>>>>>>>> 开始渲染1个isv模块 >>>>>>>>>>');
165
165
  console.log(
166
166
  '==========当前业务类型renderSourceType、楼层floorId: ',
167
167
  renderSourceType,
168
168
  floorData.uid,
169
169
  );
170
170
  const modularPackResult = floorData?.floorExtInfo?.modularPackResult;
171
171
  const modularPackResultObj = formatPackResult(modularPackResult);
172
172
  const bundleUrl = getBundleUrl(modularPackResultObj);
173
173
  const bundleFileName = getBundleFileName(modularPackResultObj);
174
174
  const taroVersion = getTaroVersion(modularPackResultObj);
175
175
  const opt = {
176
176
  msg: `店铺h5楼层隐藏不显示。原因:模块数据不完备,楼层过滤。`,
177
177
  floorIdx: floorData?.floorIdx,
178
178
  uid: floorData?.uid,
179
179
  shopId: floorData?.floorExtInfo?.shopId,
180
180
  moduleId: floorData?.moduleId,
181
181
  moduleDesignerType: floorData?.floorExtInfo?.moduleDesignerType,
182
182
  floorLoadWay: floorData?.floorExtInfo?.floorLoadWay,
183
183
  floorKind: floorData?.floorExtInfo?.floorKind,
184
184
  middleTemplateId: floorData?.middleTemplateId,
185
185
  modularPackResult: {
186
186
  bundleUrl,
187
187
  taroVersion,
188
188
  },
189
189
  };
190
190
  if (bundleUrl && bundleFileName) {
191
191
  let ISVModule = taroJdBaseInfo?.renderedIsvComponents[bundleFileName] || null;
192
192
  if (!ISVModule) {
193
193
  ISVModule = lazy(() => import(bundleFileName + '@@@@@@' + bundleUrl));
194
194
  console.log(
195
195
  '1|加载isv模块==========走lazy import生成新的isv模块react组件',
196
196
  bundleFileName,
197
197
  );
198
198
  taroJdBaseInfo.renderedIsvComponents[bundleFileName] = ISVModule;
199
199
  console.log(
200
200
  '2|渲染isv模块的react组件==========,window.taroJshopH5WebpackJsonp上的组件是否已就绪: ',
201
201
  bundleFileName,
202
202
  window['taroJshopH5WebpackJsonp'].find((item) => item[0][0] == bundleFileName),
203
203
  );
204
204
  } else {
205
205
  console.log(
206
206
  '1|加载isv模块==========不走lazy import生成新的isv模块react组件,从已加载中获取,taroJdBaseInfo: ',
207
207
  taroJdBaseInfo,
208
208
  );
209
209
  console.log(
210
210
  '2|渲染isv模块的react组件==========,taroJdBaseInfo.renderedIsvComponents上的组件是否已就绪: ',
211
211
  taroJdBaseInfo.renderedIsvComponents[bundleFileName],
212
212
  );
213
213
  }
214
214
  const _floorHeight = getFloorSetHeight(floorData);
215
215
  return (
216
216
  <ErrorBoundary {...props}>
217
217
  <Suspense
218
218
  fallback={
219
219
  <View
220
220
  style={{
221
221
  position: 'relative',
222
222
  background: `#ffffff url('${JD_PLACEHOLDER_IMG}') center center no-repeat`,
223
223
  height: `${_floorHeight}px`,
224
224
  }}
225
225
  ></View>
226
226
  }
227
227
  >
228
228
  <ISVFloor
229
229
  {...props}
230
230
  dataDefines={dataDefines}
231
231
  forceRenderTime={forceRenderTime}
232
232
  isRealTimeRender={realTimerRenderTypeList.includes(
233
233
  taroJdBaseInfo.info.pageInfo.dataType,
234
234
  )}
235
235
  >
236
236
  <ISVModule {...props} dataDefines={dataDefines}></ISVModule>
237
237
  </ISVFloor>
238
238
  </Suspense>
239
239
  </ErrorBoundary>
240
240
  );
241
241
  } else {
242
242
  console.log(
243
243
  '3|isv模块渲染异常,modularPackResult中缺少bundleUrl或bundleFileName==========modularPackResult: ',
244
244
  modularPackResultObj,
245
245
  );
246
246
  draBusinessCustomReport({
247
247
  eventName: 'business',
248
248
  errorName: getSgmCustomCode(
249
249
  handleSgmCodeTaroVersion(
250
250
  floorData?.floorExtInfo?.floorKind === FLOOR_KIND.PDC_SYSTEM_MODULE
251
251
  ? SgmCustomCode.SYSTEMPDCMODULE_DATA
252
252
  : SgmCustomCode.REMOTEMODULE_DATA,
253
253
  ),
254
254
  ),
255
255
  errorMessage: '店铺h5楼层隐藏不显示。原因:模块数据不完备,楼层过滤。',
256
256
  extraData: JSON.stringify(opt),
257
257
  });
258
258
  return null;
259
259
  }
260
260
  } catch (err) {
261
261
  console.log('3|isv模块渲染异常,floorItem逻辑错误==========err: ', err);
262
262
  return null;
263
263
  }
264
264
  })();
265
265
  if (renderResult === null) {
266
266
  updateContainerFloorListDataFn &&
267
267
  updateContainerFloorListDataFn({
268
268
  type: 'filter',
269
269
  containerId: floorData?.uid,
270
270
  });
271
271
  console.log('renderResult === null: 命中了!');
272
272
  taroEventSendPageScrollInfo();
273
273
  } else {
274
274
  console.log('renderResult !== null: 没命中', renderResult);
275
275
  }
276
276
  return renderResult;