API 更改后重新渲染 React 组件

Posted

技术标签:

【中文标题】API 更改后重新渲染 React 组件【英文标题】:Rerender React component after API is changed 【发布时间】:2021-11-06 01:29:39 【问题描述】:

我无法显示我通过 hendleSubmit 函数发布到 api 的消息。消息被发送并添加到数组中,但它不会立即显示,只有在我重新加载页面时才会显示。有人可以帮我解决这个问题吗?

这是我的代码:

export const ConversationForm = () => 
    const  isLoading, data=  = useQuery(['conversationForm'], () => conversationMessageService.getConversationMessages());
    
declaration of the component and getting data from api in 'data' array

    <Grid container className=classes.conversation>
            <SadStates
              states=[
                
                  when: isLoading,
                  render: <Loader/>
                
              ]>
              data.items===undefined?
                <img src=emptyChatIcon alt=''/>:
                <ScrollToBottom mode='bottom' className=classes.scrollBottom>
                  data.items.map((message) => 
                    return (
                      <ConversationMessage
                        message=message
                        key=message.id
                        customerName=customerName
                        userName=userName/>
                    );
                  )
                </ScrollToBottom>
              
            </SadStates>
          </Grid>

调用子组件逐条打印消息

     <Formik
        initialValues=
          userPhone: userPhone,
          customerPhone: customerPhone,
          conversationMessageSender: conversationMessageSender,
          body: '',
          conversationMessageType: 1
        onSubmit=handleSubmit>
        () => (
          <Form>
            <Grid container>
              <Grid item>
                <ConversationInputField inputName='body'/>
              </Grid>
              <Grid item>
                <button type='submit'>
                  <Grid item>
                    <img src=sendIcon alt=''/>
                  </Grid>
                </button>
              </Grid>
            </Grid>
          </Form>
        )
      </Formik>

我在提交时调用 post 方法的表单

  const handleSubmit = async( values,  setSubmitting ) => 

    try 
      await conversationMessageService.createConversatonMessage(values);
      values.body='';
      setSubmitting(false);
     catch (error) 
      console.log(error);
    
  ;

处理提交函数

【问题讨论】:

【参考方案1】:

我在您的代码中没有看到任何地方重新获取提交的数据。您的前端应该如何知道您已在后端将 X 更改为 Y?

提交后重新获取它并刷新保存数据的本地状态和/或在从后端获取正确值时对本地状态进行乐观更新。

React 查询是一个非常棒的工具。变异数据还允许您取消先前的查询(开始自动刷新)并进行乐观更新,您可以在其中预测您的状态将是什么样子,以防您正在处理的数据需要更长的时间来加载/非常复杂性,以避免让用户等待。

【讨论】:

useEffect(() =&gt; refetch(); , [refetch]);我添加了这个但仍然没有改变我的观点 我再次查看了您的答案并明白了。非常感谢!!!

以上是关于API 更改后重新渲染 React 组件的主要内容,如果未能解决你的问题,请参考以下文章

页面重新渲染/更改后如何维护组件状态?

React:如何停止重新渲染组件或对同一路由更改路由器进行 API 调用

React 功能组件在重新挂载后停止渲染状态更改

为啥组件在状态更改后不重新渲染。在 react-native 函数组件中

API 调用后 React/Flux seState 不重新渲染组件

React Native:状态更改后无法重新渲染图像