条件对于各种语言具有各种含义,并且可能应该作为标记避免。
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)将数据更改反映到您尝试更新的组件。
如何根据多个条件更改列中的某些值,而在不满足条件时保持其他值不变?
我有一个数据集,我经常在 R 中更新和分析时提取该数据集。我试图弄清楚如何在列中的值满足 2 个条件时更改它们,否则保留现有的 va...
大家好,感谢您花时间帮助我。 我需要根据网站的语言做一个条件。 在下面的部分中,我需要根据 t 显示 aria 标签...
大家好,感谢您花时间帮助我。 我需要根据网站的语言做一个条件。 在下面的部分中,我需要根据 t 显示 aria 标签...
C++ 所有 Int 对于 if 语句都有效 |如果(选择== 1)
我有一些可能很简单的问题: 为什么每个 Integer 都被接受为 if 语句中的有效输入 为什么 if 语句后面的代码没有被执行 #包括 我有一些可能很简单的问题: 为什么每个整数都被接受为 if 语句中的有效输入 为什么 if 语句后面的代码没有被执行 #include <iostream> #include <limits> int main(){ int choice; std::cout << "Enter the number 1" <<'\n'; while (!(std::cin >> choice)){ if(choice == 1) { std::cout << "good" << '\n'; break; } else{ std::cout << "bad" << '\n'; std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << "enter the number 1!"<< '\n'; } } return 0; } 封闭的 while 确保仅在输入不是有效整数时才进入循环。 while 主体内的代码似乎混淆了这一点。 if 条件假设输入足够有效,可以测试 1 性。这几乎适用于现代 C++,因为 choice 将被设置为 0,而永远不会为 1。如果它不是 1,则会清除错误输入并重试。但是,一旦用户输入有效整数,就永远不会进入循环,并且不会测试有效输入的 1 性。 这是用额外的函数来分割事物的情况 int get_int(std::istream & in) { int choice; while (!(in >> choice)) // stau in the loop until the user provides a good value { std::cout << "bad" << '\n'; in.clear(); in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << "enter the number 1!"<< '\n'; } return choice; // return the good value } 使代码非常容易编写。在用户输入有效的int之前,上述功能不会退出。那么 main 可以是一个简单的循环,调用 get_int 并检查 1-ness。 int main(){ std::cout << "Enter the number 1" <<'\n'; while (get_int(std::cin) != 1){ std::cout << "bad" << '\n'; std::cout << "enter the number 1!"<< '\n'; } std::cout << "good" << '\n'; } 请注意,这很简单,但有点恶心。看看我们重复了多少次std::cout << "enter the number 1!"<< '\n'? 再多做一点工作,您就可以消除这种重复。
在Excel中比较两个不相同的字符串,并根据内容输出True/False
问题中的表格有 3 行,其中一行有:适用、NA、在其列中定制。另一栏有文字:适用、不适用、标题、删除/保留” 我有图...
我想将一个名为“customer_age”的数值变量分类为“AgeGroup”。但是当我在新的度量中使用 switch 语句时,它会给出一条消息,列 &q...
我想建立一个网站,主要是活动。 所以我的问题如下: 是否有任何插件可以让我通过条件分类法进行过滤。例如,我有国家分类法和...
如何在Python中使用pyarrow读取带条件的镶木地板文件
我已经从数据库创建了一个包含三列(id、作者、标题)的 parquet 文件,并且想要使用条件(title='学习 Python')读取 parquet 文件。 下面提到的是Python代码...
我正在编写一个可执行的 perl 脚本,我们称之为 SCRIPT,它获取从命令行执行的另一个命令的输出,并对该输出执行某些操作。 例如 $ diff 文件A...
大家好,我正在做一个项目,需要一些 VBA 编码帮助来自动化此需求。 要求: 结果是对同一“类别”下的特定用户执行检查...
我有一个系统,可以在其中收到很多消息。每条消息都有一个唯一的 ID,但它也可以在其生命周期内接收更新。由于消息发送和处理之间的时间可以很长...
尝试编写一个查询来正确创建并填充 ID 列,该列会一直计数,直到在数据列中遇到新的非空值,此时它会从 1 重新开始。这是一个示例...
用前导零更新 pandas 数据框列的值,其中值的长度等于 2
我有一个示例 pandas 数据框(df),具有以下值: 姓名 标签 猫 A12 狗 67 老鼠 20 猴 10.8 鹦鹉 V20.6 我需要更新标签列的值,其中有一个 mi...
嘿嘿我最近开始学习Python。下面是查找最大数字的程序,我想知道如何打印第二大数字。提前致谢。 x=int(input("输入第一个...
如何构建 numpy 过滤器,根据逻辑添加每个过滤器元素,而不是立即启动整个过滤器? 我想建立一个像这样的过滤器: 过滤器=[] 如果 A == 0: 过滤....
我试图在运行代码之前检查目录是否至少包含一个 .JPG 文件。 [ -f *.JPG ] && 回显“是” 将导致以下错误: bash: [: 太多的争论...
在某些情况下,我可以使用@字符而不是使用较长的isset()函数吗? 如果没有,为什么不呢? 我喜欢用这个,因为在很多情况下我可以节省几个引号,括号......
@ConditionalOnProperty Bean 配置未按预期工作
对于一个简单的 Spring Boot 应用程序,我在尝试有条件实例化 beans 时遇到意外行为。 我在 application.yml 中定义了条件标志: service.enable=true 然后我
我目前正在处理两个数据集,一个包含纺织行业机器的维修记录,另一个数据集包含机器的预防性维护记录