我有一个功能组件,可显示要上传的图像或视频的预览。我有条件地根据名为media的状态变量进行渲染:
60, 60, 24, 365, 100
ss, mm, hh, jd, c
我将其包装在 const renderMediaInPreview = useCallback(() => {
if(media && media.type === "image") {
return (
<Image style={{ height: '100%', aspectRatio: 1, resizeMode: 'cover'}} source={{ uri: media.uri }} />
)
} else if(media && media.type === 'video') {
return (
<Video
style={{ flex: 1 }}
source={{ uri: media.uri }}
isLooping
shouldPlay
resizeMode={Video.RESIZE_MODE_COVER}
isMuted={true}
/>
)
}
}, [media])
中,因此仅在useCallback
值更改时才调用该函数。但是,使用控制台日志时,我无法看到只要更改了组件的其他状态,该组件就会重新运行,即使media
值保持不变,也会使图像消失。有什么见解吗?以下是我的回报和行为摘要。
media
https://drive.google.com/file/d/1-fYSOYTP0W86rRaS_CHqWw_gYfZFBcXT/view?usp=sharing
答案 0 :(得分:0)
能够找出原因并找出与readonly
的问题无关。我已经完成了一些代码重构,function onEdit(event) {
...
var offsetRange = event.range.offset(0,31);
if(offsetRange.isBlank()){
offsetRange.setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
}
}
}
稍有变化,由于重构,我没有注意到,并且不再呈现任何内容,因为如果与上述SELECT
ACCOUNT_ID
,EXT_REF_NO
,SERIAL_NUM
,Coalesce(Lag(next_start)
Over (PARTITION BY ACCOUNT_ID, EXT_REF_NO
ORDER BY next_start NULLS LAST)
,min_start) AS RECORD_START_DT
-- If your Teradata version doesn't support LAG/LEAD you must switch to the MAX version
-- ,Coalesce(Max(next_start)
-- Over (PARTITION BY ACCOUNT_ID, EXT_REF_NO
-- ORDER BY next_start NULLS LAST
-- ROWS BETWEEN 1 Preceding AND 1 Preceding)
-- ,min_start) AS RECORD_START_DT
,RECORD_END_DT
FROM
(
SELECT
ACCOUNT_ID
,EXT_REF_NO
,SERIAL_NUM
,RECORD_START_DT
,RECORD_END_DT
-- to check for a gap
,Lag(fixed_start)
Over (PARTITION BY ACCOUNT_ID, EXT_REF_NO
ORDER BY fixed_start DESC) AS next_start
-- ,Max(fixed_start)
-- Over (PARTITION BY ACCOUNT_ID, EXT_REF_NO
-- ORDER BY fixed_start DESC
-- ROWS BETWEEN 1 Preceding AND 1 Preceding) AS next_start
-- used in the outer COALESCE to get the min start for the 1st group
,Min(RECORD_START_DT)
Over (PARTITION BY ACCOUNT_ID, EXT_REF_NO) AS min_start
-- gap detection
,CASE WHEN Cast(RECORD_END_DT AS DATE) + 1 = Cast(next_start AS DATE) THEN 0 ELSE 1 END AS flag
FROM
( -- fixing the bad data first
SELECT t.*
,CASE WHEN RECORD_START_DT > RECORD_END_DT THEN RECORD_START_DT - INTERVAL '1' DAY ELSE RECORD_START_DT END AS fixed_start
FROM tab AS t
) AS fixed_data
QUALIFY flag = 1
) AS dt
检查不匹配。
较小的错误最终导致花费大量不必要的时间……叹了口气。