Passing method with parameter

Asked

Viewed 32 times

0

Is it possible for me to use a function of the parent component that updates the state of that same component in ANOTHER component? (this function has a parameter that would be the new value to be updated)

This is the function I want to use on the child component

Function updateCadastros(newCadastro){ setCadastros(registrations => { Return[...registrations] }) }

Parent component:

import './App.css';
import React, {useState} from 'react';
import {Table, Jumbotron, Button} from 'react-bootstrap'
import Formulario from './Formulario'
import renderCadastros from './renderCadastros'

function App() {
  
  const [Cadastros, setCadastros] = useState([{
    "id": 1,
    "nome": "Francisca Julia da Costa",
    "cpf": "457.696.936-65",
    "rg": "47.360.897-2",
    "data_nasc": "23/03/1944",
    "sexo": "Feminino"
  },
  {
    "id": 2,
    "nome": "Noah Felipe Silva",
    "cpf": "956.531.431-70",
    "rg": "40.974.782-8",
    "data_nasc": "11/07/1964",
    "sexo": "Masculino"
  },
  {
    "id": 3,
    "nome": "Alícia Rosângela Melo",
    "cpf": "066.291.353-18",
    "rg": "36.214.141-1",
    "data_nasc": "18/02/1978",
    "sexo": "Feminino"
  }]) 
  
  function atualizarCadastros(novoCadastro){
    setCadastros(cadastrosAtuais => {
      return[...cadastrosAtuais, novoCadastro]
    })
  }

  return (
  
  <Jumbotron style={{background: 'transparent'}}> 
    
    <Formulario/>

    <Table striped bordered hover size='sm'>
      <thead>
        <tr>
          <th>id</th>
          <th>Nome</th>
          <th>CPF</th>
          <th>RG</th>
          <th>Nascimento</th>
          <th>Sexo</th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        {Cadastros.map(renderCadastros)}
      </tbody>
    </Table>

  </Jumbotron>
  
  );
}

export default App;

Child component in question:

import './App.css';
import React, {useRef} from 'react';
import {Button, Form, Col} from 'react-bootstrap'

function Formulario (){

  return(
    <div>
    <Form>
    <Form.Row>
      <Col>
        <Form.Label>Identificação</Form.Label>
        <Form.Control placeholder="Id" />
      </Col>
      <Col>
        <Form.Label>Nome Completo</Form.Label>
        <Form.Control placeholder="João Silva" />
      </Col>
      <Col>
        <Form.Label>CPF</Form.Label>
        <Form.Control placeholder="000.000.000-00" />
      </Col>
      <Col>
        <Form.Label>RG</Form.Label>
        <Form.Control placeholder="0.000.000" />
      </Col>
      <Col>
        <Form.Label>Data de Nascimento</Form.Label>
        <Form.Control placeholder="DD/MM/AAAA" />
      </Col>
      <Col>
        <Form.Label>Sexo</Form.Label>
        <Form.Control placeholder="Masculino/Feminino" />
      </Col>
    </Form.Row>
    </Form>
    <div  style={{display: 'flex', flexDirection: 'column', alignItems: 'center'}}>
      <Button style={{margin: '10px'}} variant="primary">Cadastrar</Button>
    </div> 
  </div>
  )  
}

export default Formulario

And follow the other component that makes up the application just to complete the code:

import './App.css';
import React from 'react';
import {Button} from 'react-bootstrap'

function renderCadastros(cadastro, index){
    return(
    <tr id={cadastro.id} key={index}>
        <td>{cadastro.id}</td>
        <td contentEditable="true" suppressContentEditableWarning={true}>{cadastro.nome}</td>
        <td contentEditable="true" suppressContentEditableWarning={true}>{cadastro.cpf}</td>
        <td contentEditable="true" suppressContentEditableWarning={true}>{cadastro.rg}</td>
        <td contentEditable="true" suppressContentEditableWarning={true}>{cadastro.data_nasc}</td>
        <td contentEditable="true" suppressContentEditableWarning={true}>{cadastro.sexo}</td>
        <td align="center"><Button variant="danger">Excluir</Button></td>
    </tr>)
  }

  export default renderCadastros

1 answer

0


In the component you can pass the function as an HTML attribute:

<Formulario atualizarCadastro={atualizarCadastro} />

In the child component, you access the function through the argument properties:

function Formulario({ atualizarCadastro }) { ... }
  • And in case I’m going to use the function on the child component with the parameters, I usually use?

  • You can use it normally.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.