【发布时间】:2021-12-25 16:53:07
【问题描述】:
我正在使用 React 构建电子商务,其中有一个包含不同货币的下拉菜单。货币来自包含所有信息的 GraphQL 端点。当用户选择一种货币时,它会更改列出的价格。这是由上下文实现的,我在货币选择器组件中使用该上下文。所有这一切都很好,但是,当我从一开始就启动网络时,什么都没有显示,因为没有默认货币保存。我正在尝试将下拉菜单中的第一种货币保存到本地存储并将其设置为上下文,但这对我没有任何作用。请让我知道您建议这样做吗?
我将在下面附上货币选择器组件和货币上下文的代码。
CurrencyContext.js
export const CurrencyContext = createContext()
class CurrencyContextProvider extends Component {
state = {selectedCurrency: 'uiu'}
setCurrency = (c)=>{
this.setState({selectedCurrency: c})
}
render() {
return (
<CurrencyContext.Provider value={{...this.state, setCurrency: this.setCurrency}}>
{this.props.children}
</CurrencyContext.Provider>
)
}
}
export default CurrencyContextProvider;
CurrencySelector.js
export class CurrencySelector extends React.Component{
constructor(props) {
super(props)
this.state = { currencies: [] }
}
async componentDidMount(){
let currencies = (await this.getCurrencies()).data.currencies
this.setState({ currencies:currencies } )
}
async getCurrencies(){
return await fetchTheQuery( `query{ currencies }` )
}
render() {
return (
<CurrencyContext.Consumer>
{(currencyContext) => {
const {setCurrency} =currencyContext
return(
<select name="currency-selector"
onChange={event => {
setCurrency(event.target.value)
localStorage.setItem("currency", event.target.value)
}}>
{this.state.currencies.map(
(currency, index) => {
return (
<option value={currency}>
{currency}
</option>
)
}
)}
</select>
)
}}
</CurrencyContext.Consumer>
)
}
}
【问题讨论】:
-
@Andy 你能告诉我吗?
-
@Andy 顺便说一句,我正在使用一个类组件 idk 是否可以使用它
-
是的,对不起,我完全错过了。
-
你在哪里从 localstorage 获取状态?
-
@programoholic 数据在
getCurrencies()inCurrencySelector.js下获取
标签: javascript reactjs react-context