reactjs - 如何在 React 的类中将状态更新为 Provider 上下文
问题描述
我有一个问题,我需要将一个数组传递给类 DragAndDropProvider 但不工作,我可以在控制台日志中看到值,但不可能用值更新状态,收到错误为:
警告:在现有状态转换期间无法更新(例如在 内render
)。渲染方法应该是 props 和 state 的纯函数。
在那一刻我称之为类索引
const documents = UseGetDocuments();
const { state, setItemsArray } = useContext(DragAndDropContext);
setItemsArray(documents);
DragAndDropProvider
export class DragAndDropProvider extends Component<any, any> {
constructor(props: any) {
super(props);
this.state = {
items: [],
moveItem: this.moveItem,
setItems: this.setItems
};
}
an_independent_function(documents: any) {
console.log(documents);
this.setState({ items: documents })
}
render() {
return (
<DragAndDropContext.Provider
value={
{
state: this.state,
setItemsArray: (documents: any) => {
this.an_independent_function(documents);
},
}
}>
{this.props.children}
</DragAndDropContext.Provider>
);
}
解决方案
使用 Class 组件时,您需要绑定 'this' 以使其在回调函数中工作。
constructor(props: any) {
...
this.an_independent_function = this.an_independent_function.bind(this);
}
推荐阅读
- python - python程序执行后如何运行外部程序
- apache-spark - pyspark 将多列转换为不同的数据类型
- excel - 在 VA02 表格控件中读取文本
- sql - 如何在没有分组依据的列的情况下获得正确的结果?
- java - BufferedOutputStream 无法按预期使用韩语字符
- unicode - ascii中的254符号是什么,是■还是þ?
- python - 如何检查短语中是否有特定年份?
- python - 如何为 Python Pandas 中的每个重复元素添加一列?
- python - 如何使用pyspark从spark数据帧中过滤/提取无效的时间戳值
- c# - 集合属性上的动态 Linq 嵌套选择