在 React 无状态组件中存储不可观察数据的最佳方式(使用 Hooks)
Best way to store non-observable data in a React Stateless Component (with Hooks)
我正在使用 mobx-react / mobx-react-lite 进行状态管理
使用 类 我可以定义一个不可观察的 idToDelete 来存储点击的项目 ID,使用可观察的打开一个模式,当用户点击 "Delete" 时,我知道要删除的项目。组件通过重新渲染"remembered" "remembered"
class Greeting extends React.Component {
idToDelete = null;
confirmDelete = id => {
this.idToDelete = id;
openConfirm = true;
}
closeModal = () => {
openConfirm = true;
this.idToDelete = null;
}
@observable
openConfirm = false;
render() {
// List of items with delete button
<button onClick=this.confirmDelete(id)>Delete</button>
// Confirm Delete Modal
}
}
但在无状态组件中,id 将在每次重新渲染时变为 null(初始化值)。
使用 useLocalStore 钩子我可以存储可观察值:
All properties of the returned object will be made observable
automatically
但我不想重新渲染只是因为我是 storing/changing id。
使用 React.React.createContext / useContext 对我来说似乎有点矫枉过正(它是一种私有值,在组件本身之外不相关)
是否有 "local storage" 方法来实现这一点? (没有可观察到的转换)
针对这种情况的最佳做法是什么?
您可以使用 useRef 挂钩来保存值。对此值的更改不会触发 re-render,除非您覆盖它,否则该值将在渲染中保持不变。
也有详细解释here
Yes! The useRef() Hook isn’t just for DOM refs. The “ref” object is a
generic container whose current property is mutable and can hold any
value, similar to an instance property on a class.
例如:
import { useRef } from 'react';
const idToDelete = useRef("");
confirmDelete = id => {
idToDelete.current = id;
}
closeModal = () => {
idToDelete.current = null;
}
另外请注意,您需要使用 .current
来访问数据。
我正在使用 mobx-react / mobx-react-lite 进行状态管理
使用 类 我可以定义一个不可观察的 idToDelete 来存储点击的项目 ID,使用可观察的打开一个模式,当用户点击 "Delete" 时,我知道要删除的项目。组件通过重新渲染"remembered" "remembered"
class Greeting extends React.Component {
idToDelete = null;
confirmDelete = id => {
this.idToDelete = id;
openConfirm = true;
}
closeModal = () => {
openConfirm = true;
this.idToDelete = null;
}
@observable
openConfirm = false;
render() {
// List of items with delete button
<button onClick=this.confirmDelete(id)>Delete</button>
// Confirm Delete Modal
}
}
但在无状态组件中,id 将在每次重新渲染时变为 null(初始化值)。
使用 useLocalStore 钩子我可以存储可观察值:
All properties of the returned object will be made observable automatically
但我不想重新渲染只是因为我是 storing/changing id。
使用 React.React.createContext / useContext 对我来说似乎有点矫枉过正(它是一种私有值,在组件本身之外不相关)
是否有 "local storage" 方法来实现这一点? (没有可观察到的转换)
针对这种情况的最佳做法是什么?
您可以使用 useRef 挂钩来保存值。对此值的更改不会触发 re-render,除非您覆盖它,否则该值将在渲染中保持不变。
也有详细解释here
Yes! The useRef() Hook isn’t just for DOM refs. The “ref” object is a generic container whose current property is mutable and can hold any value, similar to an instance property on a class.
例如:
import { useRef } from 'react';
const idToDelete = useRef("");
confirmDelete = id => {
idToDelete.current = id;
}
closeModal = () => {
idToDelete.current = null;
}
另外请注意,您需要使用 .current
来访问数据。