gpt4 book ai didi

javascript - 如何在单击按钮时更新 react 上下文提供程序状态

转载 作者:行者123 更新时间:2023-12-01 00:38:37 25 4
gpt4 key购买 nike

WebContext.js

import React, { createContext, Component } from 'react';

export const WebContext = createContext();

class WebContextProvider extends Component {
state = {
inputAmount: 1,
};

render() {
return <WebContext.Provider value={{ ...this.state }}>{this.props.children}</WebContext.Provider>;
}
}

export default WebContextProvider;

App.js

const App = () => {

return (
<WebContextProvider>
<UpdateBtn />
</WebContextProvider>
);
};

export default App;

更新Btn.js

const UpdateBtn = () => {

return (
<Div>
<Button onClick={} />
</Div>
);
};

export default UpdateBtn;

如何在 UpdateBtn.js 中单击按钮时更新 WebContext.js 中存在的 inputAmount 状态? App.jsUpdateBtn.js 的父组件 另外,如何将 WebContext.js 转换为功能组件?

最佳答案

您应该在 Provider 中传递函数,您可以调用该函数来更新值:WebContext.js


import React, { createContext, Component } from 'react';

export const WebContext = createContext();

class WebContextProvider extends Component {
state = {
inputAmount: 1,
};

render() {
return (
<WebContext.Provider
value={{
data: ...this.state, // all data now in context.data field
update: () => { // we added this callback
this.setState((state) => ({
inputAmount: state.inputAmount + 1,
}));
},
}}
>
{this.props.children}
</WebContext.Provider>
);
}
}

export default WebContextProvider;

App.js

const App = () => {

return (
<WebContextProvider>
<UpdateBtn />
</WebContextProvider>
);
};

export default App;

更新Btn.js

const UpdateBtn = () => {
const context = useContext(WebContext); // we use hook to get context value
return (
<Div>
<Button onClick={context.update} />
</Div>
);
};

export default UpdateBtn;

const UpdateBtn = () => {

// or we can use Consumer to get context value
return (
<Div>
<WebContext.Consumer>
{context => <Button onClick={context.update} />}
</WebContext.Consumer>
</Div>
);
};

export default UpdateBtn;

关于javascript - 如何在单击按钮时更新 react 上下文提供程序状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57888975/

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