【问题标题】:Seperate functions of same component into different files将同一组件的功能分离到不同的文件中
【发布时间】:2021-08-17 09:13:55
【问题描述】:

假设我有一个页面 form.js 在 NEXT.JS 上运行

import "..." ...

export default function Form() {
    const [page, setPage] = useState(0);
    const [form, setForm] = useState({name: 'John', lastname: 'Doe'})

    return (
        <>
            {page === 0 && step_name() }
            {page === 1 && step_lastname() }
        </>
    ); 

    function step_name() {
        return ( 
          <div> 
              <input name="Name" placeholder="Enter your name" onSubmit={setForm({name: e.target.value})}/>
          </div>
        );
    }

    ....
}

如何将函数step_name() 分离到一个单独的文件中,而不是一个页面。我需要一个“帮助”文件来存储所有渲染函数并且还可以访问组件状态。

我没有找到关于如何在 NEXTJS 上执行此操作的文档。

【问题讨论】:

标签: node.js reactjs next.js


【解决方案1】:

您需要对step_name 函数进行一些调整,以便可以访问setForm 函数。

  1. 创建要从中导入函数的新文件
  2. 导出新函数
    export function step_name(setForm) {
        return ( 
          <div> 
              <input name="Name" placeholder="Enter your name" onSubmit={setForm({name: e.target.value})}/>
          </div>
        );
    }
  1. 返回原始文件导入函数
import { step_name } from './helpers'
  1. 更新您的返回函数以传递正确的参数
   return (
       <>
           {page === 0 && step_name(setForm) }
           {page === 1 && step_lastname() }
       </>
   ); 

【讨论】:

  • 我将如何扩展它?我有 50 多个函数,每一步都对应。
  • 除了拥有 50 多个不同的辅助函数之外,您能否不将所需的任何数据传递给单个函数并根据它接收到的数据来改变它返回的内容?要获得更具体的答案,@xornoz 需要更准确地说明究竟需要什么,但 Gabriel 已经回答了最初的问题
  • @Maximo.Wiki 所有功能都会呈现具有不同输入字段排列的问卷类型页面,这是没有办法的。我希望这些函数也与主组件有某种子关系,或者可能在单独的文件中扩展组件。这些渲染函数正在更新表单数据对象状态和页面状态,它们还访问作为组件一部分的其他函数。我希望能澄清一些事情。
猜你喜欢
  • 1970-01-01
  • 2018-04-12
  • 2014-06-19
  • 2015-05-13
  • 1970-01-01
  • 2019-07-01
  • 2012-10-05
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多