gpt4 book ai didi

javascript - 如何在 Next.js 中获取 _app.js 的状态?

转载 作者:搜寻专家 更新时间:2023-11-01 05:03:15 26 4
gpt4 key购买 nike

我已经使用 Next.js 在 _app.js 中启动了一个状态。我想在 index.js 文件中使用这个状态。我怎样才能访问它?

这是我的 _app.js 代码:

import React from 'react';
import App, { Container } from 'next/app';
import Layout from '../components/Layout';

export default class MyApp extends App {
constructor(props) {
super(props);
this.state = {
currencyType: {
name: 'Ether',
price: 1,
},
ethPriceUsd: 1,
};
}

static async getInitialProps({ Component, router, ctx }) {
let pageProps = {};
let ethPriceUsd;

if (Component.getInitialProps) {
fetch(`https://api.coingecko.com/api/v3/coins/ethereum/`)
.then((result) => result.json())
.then((data) => {
ethPriceUsd = parseFloat(data.market_data.current_price.usd).toFixed(
2
);
});
pageProps = await Component.getInitialProps(ctx);
}

return { pageProps, ethPriceUsd };
}

componentDidMount() {
const ethPriceUsd = this.props.ethPriceUsd;
this.setState({ ethPriceUsd });
}

onCurrencyTypeChange(currencyTypeValue) {
let currencyType = {};
//Value comes from Header.js where Ether is 0 and USD is 1
if (currencyTypeValue) {
currencyType = {
name: 'USD',
price: this.state.ethPriceUsd,
};
} else {
currencyType = {
name: 'Ether',
price: 1,
};
}
alert('We pass argument from Child to Parent: ' + currencyType.price);
this.setState({ currencyType });
}

render() {
const { Component, pageProps } = this.props;
return (
<Container>
<Layout changeCurrencyType={this.onCurrencyTypeChange.bind(this)}>
<Component {...pageProps} />
</Layout>
</Container>
);
}
}

其中很多是无关紧要的(比如将数据传递给布局等...)。我想要做的就是在我的 index.js 中使用这个状态。

最佳答案

假设您在 _app.js 中有此代码.

import React from 'react'
import App, { Container } from 'next/app'

export default class MyApp extends App {
static async getInitialProps({ Component, router, ctx }) {
let pageProps = {}

if (Component.getInitialProps) {
pageProps = await Component.getInitialProps(ctx)
}

return { pageProps }
}

state = {
name: "Morgan",
}

render () {
const { Component, pageProps } = this.props

return (
<Container>
<Component {...pageProps} {...this.state}/>
</Container>
)
}
}

请注意 state<Component {...pageProps} {...this.state}/>

解决方案一:

现在,让我们看看如何在 index.js 中使用它或任何其他页面

import React from 'react';

export default class Index extends React.Component {

render() {
return (
<div>
<h2>My name is {this.props.name}</h2>
</div>
)
}
}

您可以像这样将它们用作 Prop this.props.name

方案二:

index.js 中填充状态来自 props然后从 state 访问它

import React from 'react';

export default class Index extends React.Component {

constructor(props) {
super(props)
this.state ={
name: this.props.name
}
}

render() {
return (
<div>
<h2>My name is {this.state.name}</h2>
</div>
)
}
}

您可以像这样将它们用作 Prop this.state.name

关于javascript - 如何在 Next.js 中获取 _app.js 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53605016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com