类型错误:react__WEBPACK_IMPORTED_MODULE_2___default(...) 不是函数。我该如何解决这个问题?

IT技术 javascript node.js reactjs webpack typeerror
2021-05-03 23:28:52

当我收到以下错误时,我正在使用 React。

TypeError: react__WEBPACK_IMPORTED_MODULE_2___default(...) is not a function

我该如何解决这个问题?我在下面添加了代码。

import React from 'react';
import LoginForm from './loginForm'
import useState from "react"

function LoginPage(){
    const[details, setDetails] = useState({
        username: '',
        password: ''
    });
    function handleChange(event){
        const updatedDetails = {...details, [event.target.name]: event.target.value};
        setDetails(updatedDetails)
    }
    return(<LoginForm details={details} onChange={handleChange}/>)
};

export default LoginPage;

另一个组件是:-

import React from "react";
import 'bootstrap/dist/css/bootstrap.min.css';
import { Jumbotron, Container } from 'reactstrap';
import { Button, Form, FormGroup, Label, Input, FormText } from 'reactstrap';

function FormPage(props){
  return (
    <Jumbotron fluid>
    <Container fluid>
    <center><h1 className="display-3"> Log IN</h1></center>
    <p className="lead">Please Enter your Details Here</p>
    </Container><br />
    <Container fluid>
    <Form>
        <FormGroup>
            <Label for="username">Username</Label>
            <Input type="textarea" name="username" id="username" placeholder="Enter your Username Here" value={props.details.username} onChange={props.onChange}></Input>
        </FormGroup>
        <FormGroup>
            <Label for="password">Password</Label>
            <Input type="password" name="password" id="password" placeholder="Enter your Password Here" value={props.details.username} onChange={props.onChange}></Input>
        </FormGroup>
        <Button color="success">Submit</Button>
    </Form>
    </Container>
    </Jumbotron>
  );
};

export default FormPage;

PS:我输入这个是因为 StackOverflow 要求我添加更多细节,因为我的问题主要是代码。对不起。

4个回答

我只是要指出你是从“react”库导入两次

// You have: (look closely at libs you are importing from and how)
import React from 'react';
import LoginForm from './loginForm'
import useState from "react"

// Should be:
import React, { useState } from 'react';
import LoginForm from './loginForm'

// Why?
// Because useState is one of React libs' export default's apis / methods
// aka useState is just a part of the React default export but also is itself, an export
// React.useState() is how it would look if you just imported the React lib itself and nothing else
// how I personally handle any react apis is via ==> 
import React, { useState } from 'react

// apart from loving seeing all libraries and individual apis imported 
// as soon as I see a file to get a sense of its potential functionalities, 
// read my detailed explanation below

在这里,您实际上是export default react从整个 React 库中导入 ( ) 并简单地将其命名为一个随机字符串 useState,然后尝试使用它来使用真正的React.useState()api/方法。

因此,您尝试以useState这种方式像实际的 React api一样使用 useState绝对会导致错误,因为require('react')()当您导入 react lib 的默认导入而不是作为该默认导出一部分的 api 时,您基本上是在说这个,或者它本身就是一个导出,您需要在导入语句中从 lib 中解构,不确定是否相关,但您 100% 的代码格式错误我不敢相信甚至没有人提到这一点?

再举个例子,要让它像你拥有的那样工作(尽管 eslint 现在应该在你点击保存之前就重复导入大喊大叫)你必须这样做useState.useState(),这显然不是你想要的。有些人不介意,React.useState()但我个人会避开你哈哈 jk,但从导入中破坏!!!请 (:

出于所有原因,使用最佳编码标准是成为团队中优秀软件工程师的关键,甚至在您自己的个人项目中也是如此,并且绝对会增加您的 DX 和整体输出。

希望这对我的兄弟有所帮助。我们都经历过这些小怪癖,一旦你学会了,把它添加到你的“我肯定知道的事情”列表中并继续前进

请添加更多信息。就像您选择导入的 API/module是什么一样,它是否正在使用

export default function

对比

export function

你是怎么消费的?

您可能已将其导入为

import Something from './something';

而你的 something.js 可能看起来像:

export function Something(){
} 

如果您将 webpack 更新到 5.xx 版本,那么这可能与output.library 设置问题有关

因此,如果您在 webpack 输出中有库设置,请尝试将其删除:

output: {
  path: path.resolve(__dirname, 'build'),
  filename: 'painterro.commonjs2.js',
  library: 'Painterro',  // ⏪ this is the issue
  libraryTarget: 'commonjs2',
 },

将代码发布在引发此错误的文件中会很有用。使用此信息,您可能将某些内容作为默认导入导入,但没有从相关module中默认导出任何内容。尝试调查默认导出并查看其中之一是否没有默认导出。您可以查找module文档。