首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >useRef:呈现后状态变为未定义

useRef:呈现后状态变为未定义
EN

Stack Overflow用户
提问于 2021-04-22 21:45:31
回答 2查看 296关注 0票数 2

我使用ml5.js来训练ML模型。我必须添加图像到模型使用网络摄像头。列车功能与当前代码很好地工作。但是,当我试图在函数中的if 语句中设置一个状态时,当我尝试使用测试按钮测试时,它会抛出一个错误。

classifier的值变为undefined

代码语言:javascript
复制
export const Component: React.FC<ComponentProps> = (props: ComponentProps) => {
    let classifier: any;
         classifier = featureExtractor.classification(capture, videoReady);
    }

    
    function final() {
        classifier.classify(capture, (error, result) => {
            setPrediction(label);
            
        });
    }

    return (<div>
            <Button variant="contained" color="primary" onClick={() => final()}>testing!</Button>
        </div>
    </div>)
        ;
};

classifier是一个变量,所以它每次都会重新呈现。useRef可以在这里使用,但我不知道怎么用。

代码语言:javascript
复制
const classifier = useRef()
classifier.current

像这样访问它仍然给了我错误。我也试图为分类器本身建立一个状态,但这似乎也不适用于我。

这是一个密码箱来试一试完整的东西。要查看错误,可以在列车函数的if set语句中设置状态:

https://codesandbox.io/s/hardcore-solomon-zb34l?file=/src/Component.tsx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-25 22:19:42

我提供了一个分叉版本的Codesandbox,在上面的注释中提到过:https://codesandbox.io/s/frosty-sea-0pcfx?file=/src/Component.tsx。这包含了一些修复,但大多数修复都与更改captureclassifier的局部变量并将它们分配给refs有关。以下代码:

代码语言:javascript
复制
let capture: p5Types.Element;
let classifier: any;

改为:

代码语言:javascript
复制
let capture: any = useRef<any>();
let classifier: any = useRef<any>();

然后,代码的其他区域中所有对这些变量的引用都被转换为capture.currentclassifier.current。它们也可能被存储在状态中,但是它们似乎只被赋值和使用在呈现过程中使用的数据之外,并且不需要组件在被分配时重新呈现。

票数 1
EN

Stack Overflow用户

发布于 2021-04-25 18:21:49

我会这样做:

代码语言:javascript
复制
const { current: heap } = useRef({});

// In your `setup`
heap.classifier = featuresExtractor.classification(..);

// elsewhere access it as
heap.classifier

当你写到:

代码语言:javascript
复制
const classifier = useRef()
classifier.current

classifier.current在重呈现过程中是持久化的,但是您仍然需要在安装程序中将它标记为classifier.current = ...。我更喜欢我的写作方式,因为heap成为一个方便的地方,可以添加应该在重呈现中持久的任何其他内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67221199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档