Hooks是一项新功能,允许开发人员在不编写类的情况下使用状态和其他React功能。
我知道handleChange和handleSubmit尚未完成,但这不是问题,因为即使删除这些元素我也无法加载它。我正在学习一个较旧的教程和一些薄...
React Router v6 嵌套惰性与 useRoutes 挂钩问题
使用react-router v6和react v18。我不确定我错过了什么,但似乎带有惰性的嵌套组件不起作用。 我有这个文件结构: 路线/root.tsx 路线/概况/
const [firebaseUser, setfirebaseUser] = useState({}); const onSignUp = async (数据: FormData) => { 设置禁用按钮(真); 尝试 { const userCredential = 等待
我一直在为这个问题苦苦挣扎。在在这里创建这篇文章之前,我已经搜索了整个社区,并且看到了很多 React 中长按事件的解决方案,但是每个人......
我正在尝试将一个值增加 1。无论我尝试什么,它总是会增加超过 1。我知道该函数只会被调用一次,并且只有在单击按钮时才会被调用。 const [计数器,setCounter] =
我想为一个可以重置的游戏创建一个计时器。如果我将计时器的状态提升到父级,游戏就会变得无响应
我目前正在构建一个计时器组件,用于计算从网站加载那一刻起玩家完成游戏所需的时间。如果我将计时器的状态提升到父组件,整个应用程序将重新
我正在尝试实现一个功能,其中单击按钮后,应打开一个弹出窗口,其中包含一些内容,一旦关闭,该按钮应永久禁用。 现在,我已经实现了...
我试图通过将学生变量的值放入一个状态然后在我的处理函数中访问该状态来访问学生变量,但它总是返回一个空数组。 const 学生 = useSelector((stat...
所以我有 2 个运行良好的 redux 状态和选择器。但我想在map()循环内调用第二个选择器(根据category.id获取详细列表)。我怎样才能做到这一点? const Dashboa...
如何防止 React 计数器上 prevState 的重复行为?
我对 React 完全陌生,并试图了解与 prevState 相关的课程,特别是计数器。我尝试在单击另一个按钮时创建由计数器编号命名的按钮,b...
无法解析模块./.expo/.virtual-metro-entry
实际上我已经安装了unimodule,之前正在运行react native cli,因为tensorflow/tfjs-react-native我必须安装unimodule,但是每当我做yarn android时,我都会低于
当组件复杂如嵌套组件时,如何减少React中的重新渲染次数?
我在我的应用程序中使用 React 和 Redux Toolkit 进行状态管理,该应用程序具有嵌套的组件结构。假设我有三个主要组件:一个主包装组件、一个项目组件和一个...
我正在尝试使用 IntersectionObserverAPI 制作一个无限滚动的神奇宝贝列表,其中页面末尾有一个空的 div 元素,当需要查看更多神奇宝贝时,
在NextJS中通过useTransition()调用异步函数时没有得到返回
我使用 NextJS 14 和 Shadcn 作为组件。我有一个带有表单的组件,它使用 useTransition 挂钩将表单数据发送到操作,然后在 da...
当发送第一个请求时,isVoting 将被设置为“true”。在这种情况下,在 isVoting 设置为“false”之前,不应允许发送另一个请求。但不知怎的,V...
在 React Native 中加载预填充的 SQLite 数据库速度很慢
我已经预填充了数据库,例如包含 100k 行列表的表。数据是静态的,不会改变。我尝试先加载数据,然后启用搜索,以搜索表中的单词。我...
React:为什么即使满足条件,我的条件渲染组件也没有被渲染?
在 React 中,有一个父组件,它根据是否有选定的线程有条件地渲染输出组件: {我的... 在 React 中,有一个父组件,它根据是否有选定的线程有条件地渲染 Output 组件: <div className="flex-grow overflow-y-auto p-4"> {myStore.selectedThread ? ( <Suspense fallback={ <div className="flex justify-center items-center align-middle h-full"> <Loader active={true} className="w-36 h-36" /> <p className="text-xs text-gray-500">Loading messages...</p> </div> } > <Output loading={loading} /> </Suspense> ) : ( <div className="flex flex-col items-center justify-center h-full"> <h1 className="text-6xl font-bold text-violet-900 mb-4"> Hi, {store.profile.fname} {store.profile.lname}! </h1> <p className="text-gray-500 text-xl mb-8"> Hit record and let the magic begin. </p> <RecordingComponent myStore={myStore} /> </div> )} </div> 并且,在父组件内的 RecordingComponent 中,我在 handlePostTranscription() 函数之后使用 MobX 存储函数选择一个线程: const audioTranscriberStatus = myStore.inputActiveRecord?.audioTranscriber?.status; console.log(audioTranscriberStatus); useEffect(() => { const handlePostTranscription = async () => { const { inputActiveRecord, selectedThread } = myStore; if (!inputActiveRecord || selectedThread) { return; } try { const newThread = await createThread(); const newThreadId = newThread.thread_id; setForceRender((prev) => !prev); await updateHistory(inputActiveRecord._id, { threadId: newThreadId }); const transcriptionText = inputActiveRecord.outputs.join(" "); await addMessage(newThreadId, "user", transcriptionText); await runAssistant( transcriptionText, newThreadId, "asst_L24bszgfqSOxw3yT0dTOaIzZ", "", ); myStore.selectThread(newThreadId); console.log(myStore.selectedThread); } catch (error) { console.error("Error in post-transcription handling:", error); } }; if (audioTranscriberStatus === "done") { handlePostTranscription(); } }, [audioTranscriberStatus]); 在调试日志中,我可以看到它正确设置了线程,这意味着 myStore.selectedThread 为 true,应该渲染 Output 组件。 但是,我的问题是在父组件中,Output 没有渲染——我仍然看到欢迎屏幕。当我使用 HistoryPanel 组件或 TextInputComponent 组件设置线程时,情况并非如此。它们似乎都使 Output 组件渲染成功。 来自TextInputComponent: const handleTextSubmit = async () => { try { setLoading(true); // Save the text using the API that goes through the middleware const response = await saveText(message); if (response.data.history && response.data.history._id) { const fetchedHistory = response.data.history; let currentThreadId = fetchedHistory.threadId; if (!currentThreadId) { // Create a new thread if none exists const newThread = await createThread(); currentThreadId = newThread.thread_id; // Update history with the new thread ID await updateHistory(fetchedHistory._id, { threadId: currentThreadId, }); } // Add the message to the thread await addMessage(currentThreadId, "user", message); // Run the assistant on the message await runAssistant( message, currentThreadId, "asst_L24bszgfqSOxw3yT0dTOaIzZ", "", ); myStore.selectThread(currentThreadId); } } catch (error) { console.error(error); } finally { setMessage(""); setLoading(false); } }; 来自HistoryPanel: const handleHistoryClick = async (threadId) => { try { setSelectedThreadId(threadId); myStore.selectThread(threadId); } catch (error) { console.error("Error selecting thread:", error); } }; 最后,我的商店: selectThread = async (threadId) => { if (this.selectedThread !== threadId) { this.selectedThread = threadId; await this.fetchThreadMessages(threadId); } }; 请问有人知道是什么原因造成的吗? 我还尝试将查询参数添加到具有 threadId 的 url 中,并在 url 具有此参数时渲染 Output 组件,但是,在 handlePostTranscription() 函数中,当我使用 window.location.href 甚至useHistory,它甚至没有改变网址。所以异步函数肯定有什么东西搞砸了。 您已更改 myStore 上的对象属性,但 React 只监视外部对象,而不是其属性。 当你改变它所监视的内容时,React 会更新 DOM;然后它可以重新运行您的函数或重新渲染您的组件并对 DOM 进行更改。 我们看不到您的 myStore,但即使它是 useState 变量,它们也只能使用 Object.is 通过 浅相等 进行比较。你已经改变了它的状态,但 React 不知道要注意这一点。你的 TextInputComponent 和 HistoryPanel 意外地通过它们的 setMessage、setLoading 和 setSelectedThreadId 触发了这个,这可能会以 React 可以看到的方式改变状态变量; myStore 的更新是在您的两个工作组件中意外发生的。 尽管有一些令人沮丧的方法来强制重新渲染(请参阅可以在不调用 setState 的情况下强制 React 组件重新渲染吗?),但最好的选择可能是调用 setSelectedThreadId 或创建一个新的状态变量(例如 setTranscriptionUpdateTimestamp)将数据更改反映到您尝试更新的组件。
如何使用 EmailJS 修复无后端表单的 React 联系表单?
我正在尝试使用 EmailJS 在我的开发组合中添加工作电子邮件联系表单,因为没有后端。我已按照指示在代码中包含 e.preventDefault 语句,但是当...
如何解决渲染错误undefined is not a function
我的 API 返回一个由四个对象组成的数组,如下所示: res = [ { 导师 1 }, { 导师 2 }, { 导师 3 }, { 导师 4 } ] 我使用 foreach 数组方法循环遍历它们,以返回包含