虽然很明显为什么React默认情况下不对它的所有功能组件执行 React.memo,但我们应该在需要时自己包装我们的功能组件。
就我而言,我有一个大型 React 项目,其结构如下:
const MyBigApp = () => {
const shouldShowX = useSelector(getShouldShowX);
const shouldShowY = useSelector(getShouldShowY);
// Many more selectors
return (
<>
{shouldShowX && <ComplexComponentX />}
{shouldShowY && <ComplexComponentY />}
{/* many more components based on different selectors like above */}
</>
);
};
Run Code Online (Sandbox Code Playgroud)
我所有的业务逻辑都在 redux 中,组件在useSelector内部使用以从存储中获取数据。
用 包装我的所有子组件是否有意义React.memo,因为根级别的任何选择器的更改都会导致我的整个应用程序重新渲染?
早些时候,connect我们自动获得了一个记忆化组件,它比较了自定义道具和作为道具传递给组件的存储值,那么我们现在是否应该在未接收任何道具的组件中使用时始终手动执行?React.memouseSelector
Luminol图书馆的Github链接:https://github.com/linkedin/luminol
任何人都可以用示例代码向我解释,如何使用此模块来查找数据集中的异常.
我想使用这个模块来查找我的时间序列数据中的异常.
PS:我尝试了README.md中提供的示例1,但是收到错误,所以有人请给我一个查找异常的工作示例.
示例1将异常分数放入列表中.
from luminol.anomaly_detector import AnomalyDetector
my_detector = AnomalyDetector(ts)
score = my_detector.get_all_scores()
anom_score = list()
for (timestamp, value) in score.iteritems():
t_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))
anom_score.append([t_str, value])
Run Code Online (Sandbox Code Playgroud)
获取值错误:(22,'无效参数')在行:t_str = time.strftime('%Y-%m-%d%H:%M%S',time.localtime(timestamp))
使用Python 2.7
谢谢 :)
我需要在本机反应中实现AutoCompleteTextView。问题是没有这样的内置组件。可以用来模拟此功能的所有模块和库并不完全相似。主要问题是建议未出现在视图上方(例如选择框/选择器的建议)。即使是那样,它与KeyboardAvoidingView的表现也不完美。整个问题是它不能像Android的本机AutoCompleteTextView一样工作
另一种解决方案是使用本机UI元素。但是我想要这个组件同时适用于iOS和Android。任何帮助,将不胜感激。
PS:对不起,我正在使用移动设备时输入错误。
android ios react-native react-native-android react-native-ios
我有一个场景,我需要在整个组件生命周期中存储函数的输出(这个值永远不应该改变)。
考虑下面的例子
const UniqueIdView = () => {
const [uniqueIdState1] = useState(() => uniqueId('prefix_'))
const [uniqueIdState2] = useState(uniqueId('prefix_'))
const uniqueIdRef = useRef(uniqueId('prefix_'))
const uniqueIdMemo = useMemo(() => uniqueId('prefix_'), [])
return (
<div>
{uniqueIdState1}
{uniqueIdState2}
{uniqueIdRef.current}
{uniqueIdMemo}
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
上述 4 种方法中哪一种是理想的?
我的理解:
useState应用于存储值的变化应触发重新渲染的值。
useMemo应该在我想要记住计算的情况下使用,并且记忆总是有相关的成本。
所以,useRef我认为是合适的。
但是,我有一个困惑:
useRef将在每次重新渲染时一次又一次地触发我的函数,而使用回调方法useState只会触发我的函数一次。
但话又说回来,如果我不得不考虑一次又一次调用函数的成本,我是否应该使用useMemo(但在这种情况下,函数并不复杂,我们是否应该添加记忆开销)?
更新
我想实现什么目标?
我想创建一个应该返回的自定义挂钩,uniqueId该挂钩在重新渲染时不应更改
const UniqueId = () {
const uniqueId = useStableUniqueId('prefix__')
return <div>{uniqueId}<div>
}
Run Code Online (Sandbox Code Playgroud)
因此,无论 UniqueId 重新渲染多少次,该值都不应改变。
javascript ×2
react-hooks ×2
reactjs ×2
android ×1
ios ×1
memoization ×1
python ×1
python-2.7 ×1
react-native ×1
react-redux ×1
time-series ×1