【发布时间】:2020-09-27 10:29:31
【问题描述】:
我有一个使用类实例作为上下文值的上下文。在我更新了类实例之后。这种变化不会反映在消费者身上。消费者仍然获得旧的类价值。有人可以指出如何实现这一目标的方向吗?
// Service class
class Service {
name = "oldName"
function changeName(newName){
this.name = newName;
}
}
//Context provider
function App() {
const service = new Service();
return (
<ServiceContext.Provider value={service}>
<Home />
</ServiceContext.Provider>
);
}
然后我尝试在一个组件中更改此服务的名称属性。
import React, { useContext } from "react";
const SomeComponent = () => {
const service = useContext(ServiceContext);
const onClick = () => {
service.changeName('newName')
console.log(service.name) //here the name has updated
}
return <button onClick={onClick}>Change</h1>;
};
并尝试从组件中获取更新后的值。
//Context consumer
import React, { useContext } from "react";
const MyComponent = () => {
const service = useContext(ServiceContext);
return <h1>{service.name}</h1>;
};
但在另一个消费者中。 service.name 没有得到更新。我可以知道这是为什么吗?
【问题讨论】:
-
您能说明您是如何更改名称的吗?
-
这段代码无法编译,你应该先修复它
标签: reactjs react-context