【问题标题】:How to pass values between functional components in Reactjs?如何在 Reactjs 中的功能组件之间传递值?
【发布时间】:2023-04-01 14:31:01
【问题描述】:

我试图在两个功能组件之间传递 isAuthenticated 值(SignInOutlookAccount & SignInOutlookButton) 但我无法得到它的价值。

我怎样才能将isAuthenticated 值从SignInOutlookAccount.jsx 带到SignInOutlookButton.jsx

SignInOutlookAccount.jsx

export const getUserProfile = async (props) => {
console.log("im inside getUserProfile");

try {
    var accessToken = await userAgentApplication.acquireTokenSilent({
        scopes: config.scopes
    });
    console.log("im inside tryyyyyy");

    if (accessToken) {
        var user = await getUserDetails(accessToken);

        props = {
            isAuthenticated: true,
            user: {
                displayName: user.displayName,
                email: user.mail || user.userPrincipalName,
                accessToken: user.accessToken
            },
            error: null
        };
    }
    } catch (err) {
    var error = {};
    if (typeof err === "string") {
        var errParts = err.split("|");
        error =
            errParts.length > 1
                ? { message: errParts[1], debug: errParts[0] }
                : { message: err };
    } else {
        error = {
            message: err.message,
            debug: JSON.stringify(err)
        };
    }

    props = {
        isAuthenticated: false,
        user: {},
        error: error
    };
}

SignInOutlookButton.jsx

export const SignInOutlookButton = ({props}) => {
 return <Button text={isAuthenticated ? 'Sign In' : 'Sign Out'} startIcon={<Mail />} onClick={()=> login(props)} />;
};

CustomComponents.jsx

export const CustomComponents = props => {
return (<SignInOutlookButton/>);

};

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

在您的SignInOutlookButton 中,您正在解构props 以获得一个名为props 的属性。不要那样做。这将寻找一个名为props 的道具。您很可能不会像这样调用组件:&lt;SignInOutlookButton props={...myProps} /&gt; 如果是,请不要。

将函数声明更改为正确后:

export const SignInOutlookButton = (props) => {

您可以通过道具访问isAuthenticatedtext={props.isAuthenticated

【讨论】:

  • 我把这个组件称为 。正如你所说,我改变了一切,但 props.isAuthenticated 仍然未定义。
  • 你需要将 prop 传递给它:&lt;SignInOutlookButton isAuthenticated={isAuthenticated} /&gt;
  • export const CustomComponents = props => { return (
  • 解释一下你的意思?在功能组件中是无关紧要的。
  • 我看到了你的更新。你必须以某种方式传递一个值。仅仅因为您在一个组件中保存了一个变量并不能神奇地使其在另一个组件中可用。这是一个基本的范围界定问题。没有更多代码,我无法进一步猜测。我假设您是从 SignInOutlookAccount 中调用该组件。
【解决方案2】:

试试这个

<SignInOutlookButton isAuthenticated={isAuthenticated} />

然后像这样导出组件

export const SignInOutlookButton = (props) => {
  const { isAuthenticated } = props;

  return <Button text={isAuthenticated ? 'Sign Out' : 'Sign In'} 
    startIcon={<Mail />} onClick={()=> login(props)} />;
};

【讨论】:

  • 我在另一个功能组件中调用 SignInOutlookButton,我添加了上面的示例。我试过这样,它不起作用仍然是未定义的
  • Brian Thompson 之前的答案也很有效
猜你喜欢
  • 2021-07-02
  • 2021-07-14
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 2021-10-29
  • 1970-01-01
  • 2020-04-02
相关资源
最近更新 更多