如何在 react-hooks 的导出函数中通过 `props` 传递值

How to pass value via `props` in export function in react-hooks

如何在 react-hooks 的导出函数中使用 props。我想导出一个函数以在 Profile.js 中提供 onSubmit()。 我想从 CompanyDetails 获取 companyName 值并传递给 Profile 并通过 props 在 onSubmit() 中使用。我现在收到 'companyName' 未定义错误。

    import CompanyDetails from "./CompanyDetails";
    
    const Profile = () =>{
    
        const onSubmit = (companyName) =>{
            const profileData = async () => {
                try {   
                  const res = await axios.put('http://localhost:8000/service/company', companyName);
                  if (res.data.success) {
                   
                    // push do the rest of code after save here...
                  }
                  else {
                    console.log(res.data.message);
                    
                  }
                } catch (e) {
                   console.log(e.response.data.message);
                }
              }
             //return () => { profileData() }
             profileData();
        }
        return (
            <div className="profile_wrapper">
                <div className="wrap">
                    <h1>Details:</h1>
                </div>
                <CompanyDetails 
                 onSubmit={onSubmit}
                />
            </div>
        );
    
    }
export default Profile;


export default function CompanyDetails ({onSubmit}) {
    
        const [companyName, setCompanyName] = useState('');
    
        const handleChange = (e) => {
            e.persist();
            const {value} = e.target.value
            setCompanyName(value);
          }
          
      return (
        <div className="container">
            <Select defaultValue={'DEFAULT'} name="company" onChange={e =>handleChange(e)} id="select">
                <option value="DEFAULT" disabled>Choose an option</option>
                <option value="company1">Company 1</option>
                <option value="company2">Company 2</option>
            <Select>
            <Button onClick={onSubmit(companyName)} color="primary">
                Save
            </Button>
        </div> 
      );
    }

好的,所以我终于让它工作了。尽管我不得不基本上从头开始重写所有内容,以尝试捕获所有可能出现的奇怪小错误。但我相信问题的症结在于进行了几次不正确的函数调用。你可以看看变化,看看我在哪里做了不同的事情。

这是一个 Codesandbox 的工作代码。

我不得不模拟发出 axios 请求,但由于模拟 returns 承诺就像 axios 请求一样,您应该能够将其替换为有效的API 在你这边。

如果仍然无法正常工作,请在评论中留下 public API 端点,我将在没有模拟的情况下测试所有内容。

另请注意,有时我在导入 material-ui 组件时遇到错误。但这似乎是 Codesandbox 的问题,而不是组件本身的问题。

在您的 CompanyDetails 您需要一个 onClick 处理程序,例如:

const onClickHandler = () => onSubmit(companyName)

        <Button onClick={onClickHandler} color="primary">Save</Button>

或作为箭头函数传递:

<Button onClick={) => onSubmit(companyName)} color="primary">Save</Button>

配置文件组件中的 onSubmit 函数也存在问题。当你调用 onSubmit 时你 return 另一个函数 return () => { profileData() },当你应该调用 return profileData() 时。尽管您可以将 onSubmit 函数标记为异步并避免在其中声明其他函数恕我直言。