javascript - 当窗口变量在反应中发生变化时如何更新状态
问题描述
我有一个相当简单的类组件,它需要从用 vanilla JS 编写的服务访问一些数据。它只是 Web MIDI API 的一个接口,必须访问 MIDI 端口,然后触发回调。我将函数 setMidiPorts 导入 MIDI 服务,然后调用它并发送 MIDI 成功的端口列表。然后我需要在下拉列表中呈现这些端口,但似乎无法在组件中更新它们。我尝试将它们作为来自父母的道具传递下来,我尝试直接导入它们。似乎没有任何效果。我对反应很陌生,所以我可能做错了什么,任何人都可以通过指出我哪里出错来帮助我。
window.inputs = [];
export const setMidiPorts = (inputs) => {
window.inputs = inputs;
console.log(inputs);
};
export default class Preferences extends Component {
constructor(props) {
super(props);
this.state = {
midiInputs: window.inputs,
midiOutputs: [],
};
}
......
编辑 -
我正在查看这个问题,看看我是否可以从外部更新状态,但不明白它是如何正常工作的。
解决方案
感谢大家的建议,我设法按照这里所说的来解决它。
https://brettdewoody.com/accessing-component-methods-and-state-from-outside-react/
在组件渲染中添加这个
ref={(Preferences) => {window.Preferences = Preferences;}}
然后我能够在组件内定义 setMidiPorts 函数并从任何地方调用它window.Preferences.setMidiPorts
推荐阅读
- javascript - 默认状态在减速器内部被改变,没有任何作用
- c# - 捕获以编程方式生成的上下文菜单子菜单的单击事件
- sql-server - 在更改 Azure SQL 数据库表时调用外部 API
- python - 如何在 python 比萨程序上修复此错误
- javascript - 如何使用 Javascript 访问奇怪 Canvas 中的元素?
- python - “AttributeError:模块'enum'没有属性'IntFlag'”仅在Jupyter notebook python 3.6.7内核中?
- php - 使用 Post 方法分页搜索结果
- c++ - 为什么现在“{static const char a[]={...}”和“{const char a[]={...}”之间有区别?
- geometry - 碰撞检测和解决:在其他圆圈和多边形的运动场中的圆圈
- r - 在 R 中找不到数据(phiX174Phage)数据集