reactjs - 在不会渲染的类中使用 Hooks
问题描述
我有一个返回一些 JSX(一个离子项)的子类,它使用一个钩子来控制一些离子图标(使用钩子就像一个状态,但只是因为我可以使用非常方便的 useEffect)。
我也有蓝牙课。这是所有重要蓝牙功能的所在地。它在自己的类中的原因是因为我需要在应用程序中的任何地方都可以访问此代码(包括它创建的设备列表(上面提到的离子项目))。我这样做:
const _Bluetooth = () => {
const [state, setState] = useState([]);
useEffect(() => {
addDevice();
}, [state]);
const devices: any[] = [];
const bluetoothInitialize = () => {
for (let i = 0; i < 5; i++) {
let a = {name: "test", mac: i.toString(), connected:false}
setState({found: [...state.found, a]});
}
}
const connect = (id) => {
console.log("connecting");
}
const addDevice = () => {
let d = state.found[state.found.length - 1]
devices.push(<BluetoothDeviceItem key={d.mac} mac={d.mac} name={d.name} onClick={(id) => connect(id)} connectingState={d.connected ? 'connected' : 'not_connected'}></BluetoothDeviceItem>);
}
return {
devices, bluetoothInitialize, connect
};
}
export default _Bluetooth;
然后,我在另一个文件中创建该类的一个实例,该文件充当全局文件,然后其他文件导入此全局文件,以访问该类的一个实例:
import _Bluetooth from '../components/bluetooth/Bluetooth'
export const Bluetooth = _Bluetooth();
不幸的是 _Bluetooth 类不起作用。由于我使用的是钩子,React 期望组件被渲染,因此组件需要返回 JSX。但是我不希望它返回 JSX,而是返回可访问的函数和变量。就像我上面所说的,我使用这些钩子更像是状态,但这仅仅是因为 useEffect 函数。我可以通过以下方式轻松完成这项工作:
const state = {found: []}
然后直接将项目推送到数组中。这剥夺了我使用 useEffect 的能力,这让我的生活更轻松,但也稍微清理了代码。
是否可以在不渲染组件/返回任何 JSX 的情况下使用钩子?
解决方案
推荐阅读
- python - 如何使用 qyery 返回无在 Django 列表视图上获取外键的名称
- python - 正则表达式匹配一个字符串及其周围的 2 个字符
- html - 如何为最近的祖先提供 XPath?
- ios - Ionic IOS 谷歌登录移动“location.protocol”科尔多瓦
- javascript - Formik - 如何清除字段并显示自定义错误
- python - 如何在 python 3.8 中永久保存用户输入的数据?
- python - 如何使用 Telethon,python 仅接收来自电报频道的新消息
- django - pdfkit:包含水印的标题不重复
- c - 为什么 for 循环中的 printf 有人可以解释我吗?
- c# - 以编程方式设置 ListBox 以滚动到所选项目