我是新手,我有在两个不相关组件之间传递数据的场景.它们彼此之间是完全独立的.我有一些表单数据,无论用户输入什么,或者给定的数据应该从组件A显示到组件B.

以下是我所做的解释.

我已经创建了一个表单输入框和一个按钮.我用USSTATE创建了一个变量.我已经编写了一个提交数据的函数.我try 了上下文api,但对我不起作用.输出应该是相同的用户,给定值从组件A更新到组件B.

提前谢谢你

// code
// import { createContext } from "react";
import CompA from "./CompA";
import CompB from "./CompB";
import "./styles.css";
import { useState } from 'react'

function App() {
  const [name, setName] = useState('first')

  // const mydata = createContext();
  // const name = 'Ramu'
  return (
    <div className="App">
      <CompA setName={setName} value={name}/>
      <CompB setName={setName} value={name}/>
    </div>
  );
};
export default App;

// componentA
import React, { useState } from 'react';

const CompA = ()=>{
  const [name, setName] = useState('first')
  const AHandler = (e)=>{
    e.preventDefault()
  }
  return(
    <div>
      <h5>Component A</h5>
      <div>{name}</div>
      <form onSubmit={AHandler}>
        <input type="text" onChange={(e)=>setName(e.target.value)}/>
        <button type="submit" onClick={AHandler}>Component A</button>
      </form>
    </div>
  )
}

export default CompA;

// componentB
import React, { useEffect } from 'react';
import CompA from './CompA'

const CompB = ({setName, name})=>{
  useEffect(()=>{
    setName(name)
  })
  return(
    <div>
      <h5>The user given input should dispaly in Component B {name}</h5>
    </div>
  )
}

export default CompB;

推荐答案

因此,要达到pass data between two unrelated componentsinreact ,最好的方法通常是先处理lift the state up to a common ancestor个组件,然后再处理pass the necessary data down to the components个需要它的组件.

在您的例子中,您已经通过在App组件中定义状态并将其向下传递给CompA和CompB来开始执行此操作.

I found some minor issues in your implementation:

CompA中,您将定义一个新的州名称和一个新的setName函数.这是不必要的,因为您已经将它们作为props 从App组件传递.您应该使用传递的namesetName作为props ,而不是创建新props .

CompB中,useEffect挂钩的使用不正确.您正在try 在组件挂载时设置名称,但它已经作为props 传递,并将在App中的状态更改时自动更新.

This should fix your App Component:

import { useState } from 'react';
import CompA from "./CompA";
import CompB from "./CompB";
import "./styles.css";

function App() {
  const [name, setName] = useState(''); // Initialize with entpy string

  return (
    <div className="App">
      <CompA setName={setName} name={name} />
      <CompB name={name} />
    </div>
  );
}

export default App;

Component A:

import React from 'react';

const CompA = ({ setName, name }) => {
  const AHandler = (e) => {
    e.preventDefault();
    // No need to do anything here unless you have other logic to implement
  };

  return (
    <div>
      <h5>Component A</h5>
      <div>{name}</div>
      <form onSubmit={AHandler}>
        <input type="text" value={name} onChange={(e) => setName(e.target.value)} />
        <button type="submit">Component A</button>
      </form>
    </div>
  );
};

export default CompA;

Lastly comp B:

import React from 'react';

const CompB = ({ name }) => {
  return (
    <div>
      <h5>The user given input should display in Component B: {name}</h5>
    </div>
  );
};

export default CompB;

希望这能有所帮助

Javascript相关问答推荐

错误:找不到react-redux上下文值;请确保该组件包装在React原生Expo应用程序中的提供者中

如何在react + react路由域名中使用DeliverBrowserRouter?

在卡信息之间切换

fetch在本地设置相同来源的cookie,但部署时相同的代码不会设置cookie

*ngFor和@代表输入decorator 和选角闭合

我不知道为什么我的JavaScript没有验证我的表单

确定MutationRecord中removedNodes的索引

vscode扩展-webView Panel按钮不起任何作用

没有输出到带有chrome.Devtools扩展的控制台

colored颜色 检测JS,平均图像 colored颜色 检测JS

如何用拉威尔惯性Vue依赖下拉?

setcallback是什么时候放到macrotask队列上的?

如何使用JavaScript拆分带空格的单词

如何在ASP.NET项目中使用Google Chart API JavaScript将二次轴线值格式化为百分比

Webpack在导入前混淆文件名

JavaScript不重定向配置的PATH

使用自动识别发出信号(&Q)

使用jQuery find()获取元素的属性

P5play SecurityError:无法从';窗口';读取命名属性';Add';:阻止具有源的帧访问跨源帧

将以前缓存的 Select 器与querySelector()一起使用