我需要一些帮助:

  1. 如何使用LoginPanel组件中的值name,用户将其写入输入并单击按钮,然后在App组件中使用它.
  2. 如何将LoginPanel呈现为第一个,如果写入了输入名称并单击了按钮,则将视图切换到App组件?

我不明白这一点.

我的代码看起来是这样的.

import React, { useState } from "react";

function LoginPanel() {
  const [fname, setName] = useState({
    fName: "",
    password: "",
  });

  function handleChange(event) {
    const { name, value } = event.target;

    setName(prevValue => {
      return {
        ...prevValue,
        [name]: value
      };
    });
  }

  return (
    <div className="container">
      <h1>
        Log In ↓
      </h1>
      <form>
        <input
          onChange={handleChange}
          name="fName"
          value={fname.fName}
          placeholder="First Name"
        />
        <input
          type='password'
          name="password"
          placeholder="Password"
        />
        <button>Submit</button>
      </form>
    </div>
  );
}

export default LoginPanel;
import React, { useState } from "react";
import Header from "./Header";
import Footer from "./Footer";
import Note from "./Note";
import CreateArea from "./CreateArea";

function App() {
  const [notes, setNotes] = useState([]);

  function addNote(newNote) {
    setNotes((prevNotes) => {
      return [...prevNotes, newNote];
    });
  }

  function deleteNote(id) {
    setNotes((prevNotes) => {
      return prevNotes.filter((noteItem, index) => {
        return index !== id;
      });
    });
  }

  return (
    <div>
      <Header />
      <CreateArea onAdd={addNote} />
      {notes.map((noteItem, index) => {
        return (
          <Note
            key={index}
            id={index}
            title={noteItem.title}
            content={noteItem.content}
            onDelete={deleteNote}
          />
        );
      })}
      <Footer />
    </div>
  );
}

export default App;
import React, { useState } from "react";
import App from "./App";
import LoginPanel from "./LoginPanel";

function Main() {
  const [isLogged, setLogged] = useState(false);

  return (
    <div>
      {!isLogged ? <LoginPanel /> : <App />}
    </div>
  )
}

export default Main

我try 了很多Reaction教程和文档. 我希望在用户将其写入输入并单击按钮并在App组件中使用它之后,使用LoginPanel组件中的值name,并将LoginPanel呈现为第一个,如果输入名称已写入并单击按钮,则将视图切换到App组件?

推荐答案

将"name"状态提升到父级Main,并将状态和状态更新器函数作为props 向下传递给组件.提交表单后,更新状态.

有关更多详细信息,请参见Sharing State Between Components.

示例:

function Main() {
  const [loggedName, setLoggedName] = useState("");
  return (
    <div>
      {!name ? <LoginPanel setName={setLoggedName} /> : <App name={loggedName} />}
    </div>
  )
}
function LoginPanel({ setLoggedName }) {
  const [fname, setName] = useState({
    fName: "",
    password: "",
  });

  function handleChange(event) {
    const { name, value } = event.target;

    setName(prevValue => {
      return {
        ...prevValue,
        [name]: value
      };
    });
  }

  function login(event) {
    event.preventDefault();
    setLoggedName(fname); // <-- update parent state
  }

  return (
    <div className="container">
      <h1>
        Log In ↓
      </h1>
      <form onSubmit={login}> // <-- form submit handler
        <input
          onChange={handleChange}
          name="fName"
          value={fname.fName}
          placeholder="First Name"
        />
        <input
          type='password'
          name="password"
          placeholder="Password"
        />
        <button>Submit</button>
      </form>
    </div>
  );
}


export default LoginPanel;
function App({ loggedName }) {
  ... do what you need with the passed loggedName prop ...

  ...
}

export default App;

Javascript相关问答推荐

使用JavaScript/PHP将二维码保存为服务器端的图像

为什么子组件没有在reaction中渲染?

创建1:1比例元素,以另一个元素为中心

Flisk和JS错误:未捕获的Syntax错误:意外的令牌'<'

在JS中获取名字和姓氏的首字母

如何解决这个未能在响应上执行json:body stream已读问题?

我应该在redux reducer中调用其他reducer函数吗?

窗口.getComputedStyle()在MutationObserver中不起作用

React Code不在装载上渲染数据,但在渲染上工作

我们如何从一个行动中分派行动

显示图—如何在图例项上添加删除线效果?

在Three JS中看不到补间不透明度更改效果

JSDoc创建并从另一个文件导入类型

使用POST请求时,Req.Body为空

我怎么在JS里连续加2个骰子的和呢?

为什么123[';toString';].long返回1?

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

将范围 Select 器添加到HighChart面积图

如何找到带有特定文本和测试ID的div?

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?