reactjs - 反应组件内的导出功能或组件外同一文件中的访问状态
问题描述
我有一个需要从文件中导出的函数,但同时,我需要利用反应状态在更新时重新渲染。
从类内部导出函数似乎不太可能,那么如何从类外部的函数更新状态?
import React, {Component} from 'react';
export function functionName(){
const filter = some filter;
this.setState({
filter: newFilter
})
}
class ClassName extends Component{
constructor(){
super();
this.state = {
filter: {}
}
}
render(){
<>
</>
}
}
解决方案
您可以导出functionName
到外部,但无法访问this.setState
该函数内部。
所以你可能想要成功pure
,返回一个新的状态。请参阅 Dan Abramov 的此提示 - https://twitter.com/dan_abramov/status/824308413559668744?lang=en
functionName
因此,让我们按照 Dan 的提示让它可重用,从而做一些有趣的事情。
在下面的代码中,increment
&decrement
与functionName
您的帖子匹配。更新状态的函数(但实际上返回一个新状态)。
Counter
匹配您的ClassName
,在其中,您想要重新使用您正在导出的功能。
重用导出函数的方法是调用this.setState
inside Counter
(请参阅handleIncrement/handleDecrement
)。
import React, { Component } from "react";
// https://twitter.com/dan_abramov/status/824308413559668744/photo/1
export const increment = (state, props) => ({
value: state.value + 1
});
export const decrement = (state, props) => ({
value: state.value - 1
});
class Counter extends Component {
state = { value: 0 };
handleIncrement = () => this.setState(increment);
handleDecrement = () => this.setState(decrement);
render() {
const { value } = this.state;
return (
<>
<h1>Counter.jsx: {value}</h1>
<button onClick={this.handleIncrement}>+</button>
<button onClick={this.handleDecrement}>-</button>
</>
);
}
}
export default Counter;
现在Counter
, increment
, 和decrement
被导出并且可以在其他地方导入。
import React, { useState } from "react";
import Counter, { increment, decrement } from "./Counter";
function App() {
const [count, setCount] = useState({ value: 0 });
// ... Being reused!
const handleIncrement = () => setCount(increment);
const handleDecrement = () => setCount(decrement);
return (
<div className="App">
<section>
<h1>App: {count.value}</h1>
<button onClick={handleIncrement}>+</button>
<button onClick={handleDecrement}>-</button>
</section>
<section>
{/* We can use the counter as it is */}
<Counter />
</section>
</div>
);
}
您可以将其导入另一个文件,并按Counter
原样使用,也可以increment/decrement
在函数组件中重复使用。
这意味着,您可以在类和函数组件中使用相同的逻辑!
推荐阅读
- kubernetes - 为什么我的本地 Kubernetes 集群中需要一个 NodePort?
- matplotlib - 减少 jupyter 笔记本中 matplotlib 图像的文件大小?
- salesforce - 更新 Apex 触发器中的父对象字段
- vuepress - 如何在 VuePress 中关闭更改动画?
- python - 用列表中的每个单词替换 URL 的一部分
- python - python中的内存数据结构是什么?
- javascript - 使用ajax将表单提交给php而不刷新页面
- javascript - 使用 jQuery 检索表中的 id 数据属性
- machine-learning - 当需要输入多个文本特征时,如何处理支持向量机和文本数据?
- javascript - 在 ReactJS 中传递道具和访问对象值