【发布时间】:2019-01-07 18:22:23
【问题描述】:
我正在尝试将子组件的状态传递给App.js 文件。
为此,我想使用新的上下文 API。
但是我读过这不起作用,因为如果值动态变化,提供者必须是消费者的父级。
在我的情况下,我不需要动态更改它,我只想将状态传递给消费者。子组件的状态不会改变,所以以后不改变也没问题。
这是否可以将状态从BlogPost.js 传递到App.js?如果有使用上下文 API 的替代方法,也可以。
我的代码:
App.js:
import BlogPost from './containers/BlogPost/BlogPost';
import { MediaContext } from './containers/BlogPost/BlogPost.js'
class App extends Component {
render() {
return (
<div>
<BlogPost />
<MediaContext.Consumer>
{value =>
console.log(value)}
</MediaContext.Consumer>
</div>
);
}
}
export default App
BlogPost.js:
该组件的状态应该被传递。如果我在React.createContext('hello') 中定义上下文,它就可以工作。但我不能在那里定义状态。
export const MediaContext = React.createContext();
class BlogPost extends Component {
state = {
title: "title",
image: {
src: "link",
alt: "alt,
credits: "Unsplash",
},
text: "Text Text Text",
media: {
type: 'music',
audiosrc: 'audiosrc',
coversrc: 'coversrc',
artist: 'artist',
title: 'Songtitle',
started: false
},
}
render() {
return (
<article>
<MediaContext.Provider value={this.state}>
</MediaContext.Provider>
</article>
);
}
}
export default BlogPost;
【问题讨论】:
-
您可以使用自定义道具将数据传递给父组件。例如,在 App.js 中调用
<BlogPost onPropChange={functionInParent()}/>之类的组件,然后从 BlogPost 中调用this.props.onPropChange(data_to_be_passed)。我不明白您的 BlogPost 组件在 App.js 中的位置。如果你能澄清一下,我可以给你一个明确的解决方案。 -
对不起,我删除了太多... BlogPost 组件(目前)直接在 App.js 中使用。在我的问题中的 App.js 下也添加了 BlogPost。
标签: javascript reactjs react-context