DEV Community

Cover image for HOW TO SET UP AND USE gRPC IN REACT OR NEXT
Faisal Salif
Faisal Salif

Posted on Edited on

HOW TO SET UP AND USE gRPC IN REACT OR NEXT

  1. Download and install the protoc complier file
    https://github.com/protocolbuffers/protobuf/releases/tag/v25.

  2. Install protoc packages globally

    • npm install -g protoc-gen-js protoc-gen-grpc-web
  3. Install these two packages in your local project

    • npm install grpc-web google-protobuf
  4. Create a proto.sh file in Root Dir of your project, (this will have the script to compile our raw protos to js or tsx
    => Sample of the script i used

SHELL SCRIPT

  1. Add a script property in you packge.json to run the shell file

    • example "proto-build":"sh path_to_shell_file"
  2. Create a folder called protos in your src or app folder and inside the protos folder create a folder called raw. which we'll keep all our raw proto files. e.g src/proto/raw

  3. run the script to compile raw proto file = npm run proto-build

=> CREATING API FROM COMPLIED PROTOS

  1. Create a folder in your src and name it api , this folder will have all api files we would be using for our api calls.

  2. Create a apiConfig.js file in your src/app directory , this file will have the URL and METADATA (configurations)

e.g export const URL = "url_to_your_backend"
export const METADATA = {
key: "key_to_connect",
pass:"password_to_connect"
}

  1. Now we can go ahead to connect to the backend and consume our api's.

Image description
This how I connect to my api and access a method from the proto services

  • import {METADATA,URl} from './app/apiConfig.js'
  • import {CustomerSvcClient} from './protos/gen/Customer_grpc_web_pb' (give you the service method you need to use)
  • import {Request1,Request2,..} from './protos/gen/Customer/pb' (gives you the messages or requests to you need to use)
    function CustomerController(){
       const client = new CustomerSvcCLient(URL,null,null)

       //Creating a function to make your api requests
       const getAllCustomers = async(**data**)=>{
       try{
         return new Promise(resolve,reject)=>{
         const request = new Request1()

         //if our request requires a body we can attach them as so
         request.setName(data.name)
         request.setAge(data.age)

         //We can make out api call by using a method from our 
         client 
         client.getAllUsers(request,METADATA,(err,response)=>{
           if(err) reject(err)
           //converts our response to object
           const result = response.toObject() 
           resolve(result)
         })
       }
      }
     }catch(err){
      console.log(err)
     }

     cosnt anotheFucntion=async()=>{....}



    return {getAllCustomers,anotherFunction}



    }

export default CustomerController
Enter fullscreen mode Exit fullscreen mode
  1. Consuming the api and displaying data e.g App.js
import CustomerController from './file_directory'

//grab the methods you want to use from the API file
const {getAllCustomers,anotherFunction} = CustomerController() 

  useEffect(()=>{
     async function getData(){
       const getValue = await getAllCustomers({name:'myname',age:20})
       console.log(getValue.userlistList)
       setData(getValue.userlistList)
     }
     getData()
   },[])
Enter fullscreen mode Exit fullscreen mode

Top comments (0)