问题描述
所以我试图用react调用一个简单的后端服务(仅供参考,我对React或javascript不太了解)
import React from 'react';
import logo from './logo.svg';
import './App.css';
const {EchoRequest,EchoResponse} = require('./proto/api_pb.js');
const {EchoServiceClient} = require('./proto/api_grpc_web_pb.js');
var echoService = new EchoServiceClient('http://localhost:8081');
function App() {
var request = new EchoRequest();
request.setMessage("Pew Pew Pew")
let message = "initial value"
echoService.echo(request,{},function (err,response) {
console.log(response.getMessage())
message = response.getMessage()
});
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo"/>
<p>
{message}
</p>
</header>
</div>
);
}
export default App;
我正在尝试对message
的返回值进行模板化(应该具有echoService.echo的响应值)
但即使在控制台中显示,该应用仍会显示“初始值”而不是实际的响应类型
我知道这与某些异步行为有关,但是我不知道如何等待请求完成。
解决方法
更改这样的值不会触发重新渲染,这就是为什么在React
中可以使用state的原因。如果更改状态,则组件将重新渲染。不会发生这种情况是因为您不使用状态导致组件显示默认值的状态。
以下是有关状态如何工作的一些文档:https://reactjs.org/docs/state-and-lifecycle.html
要解决您的问题,您可以使用类似这样的React钩子:
import {useState} from 'react'
const [message,setMessage] = useState("initial value")
// Do some stuff here
setMessage(response.getMessage())
该代码显然无法立即使用,但它显示了基本知识。