React上下文api在版本16.3或最新版本中可以安全地用于生产中。添加上下文api的原因是,如果有一系列子组件,则避免传递prop。
在不使用上下文api的情况下,我们必须将道具传递给所有中间组件。另一种替代解决方案是使用第三方库(例如Redux)来维护中央存储。
App.js→书籍道具→BookList.js→再次将书籍作为道具→Book.js
随着子组件数量的增加,传递道具的链条继续进行。
使用上下文api,React提供了一种提供方使用者方法来解决此问题。
Creating the context: BaseContext.js import React from 'react'; //这与Redux的createStore方法相同 const BaseContext = React.createContext(); export default BaseContext;
import BaseContext from './BaseContext'; class BookProvider extends Component { state = { books: { book1: { name: 'React', price: 500 }, book2: { name: 'Angular', price: 450 } } }; render() { return ( <BaseContext.Provider value={{ books: this.state.books, incrementPrice: selectedID => { const books = Object.assign({}, this.state.books); books[selectedID].price =books[selectedID].price + 1; this.setState({ books }); }, decrementPrice: selectedID => { const books = Object.assign({}, this.state.books); books[selectedID].price =books[selectedID].price - 1; this.setState({ books }); } }} > {this.props.children} </BaseContext.Provider> ); } }
class App extends Component { render() { return ( <BookProvider> <div className="App"> <header className="App-header"> <h1 className="App-title">Welcome to my book store</h1> </header> <ProductBookList /> </div> </BookProvider> ); } }
在子组件中,我们可以使用使用者-
const Books = () => ( <BaseContext.Consumer> {context => ( <Fragment> <h4>Books:</h4> {Object.keys(context.books).map(bookID => ( <Car key={bookID} name={context.books[bookID].name} price={context.books[bookID].price} incrementPrice={() =>context.incrementPrice(bookID)} decrementPrice={() =>context.decrementPrice(bookID)} /> ))} </Fragment> )} </BaseContext.Consumer> );
通过使用context api,我们可以避免在React子组件中钻取道具。
摘自http://developer.android.com/guide/topics/ui/settings.html:
通过 Context 可以获取到 *Request 和 ResopnseWriter 。同时还有一些方便的函数可以进行操作。 Req() 获取到*Request对象。 Forms() 可以获取表单提交内容,具体参见 Forms Cookies() 获取到Cookies对象并进行操作。 SecureCookies() 获取到安全Cookie对象并进行操作。 ServeFile() 将文件发送给浏览器
问题内容: 我希望用户上传一个.csv文件,然后让浏览器能够解析该文件中的数据。我正在使用ReactJS。这将如何运作?谢谢。 问题答案: 弄清楚了。的组合反应文件阅读器和HTML5的的FileReader(见本页)。 将react-file-reader位放在render内部: 然后在上面。
我正在学习核心java,并学习了多线程。 我已经阅读了标准文档和这个问题,所以。。。但是在线程上下文中找不到合适的解决方案。 用书中的话说: 在两次启动线程时引发。 我不明白它说什么...甚至没有给出例子... 当它发生在线程上下文中时?有人能举个例子吗?
问题内容: 我是django初学者,所以我试图理解上下文和上下文处理器的概念。 什么是上下文,为什么要使用它? 你是否需要上下文才能在模板中使用它? 上下文和上下文处理器是否相同? 非常感谢你的回复。提前致谢! 问题答案: 当你使用Django模板时,它会被编译一次(并且只能编译一次)并存储以供将来使用,作为优化。模板可以在双花括号中包含变量名,例如 和。 一个背景是变量名称为字典键和它们的值的值
问题内容: 我有一个Spring bean(dao)对象,该对象通过以下xml在ServletContext中实例化: 该bean在我的webapp-servlet.xml文件中声明,并由我的应用程序在ServletContext中使用。 我也在使用SpringSecurity。据我了解,这在不同的上下文(SecurityContext)中运行。 我的应用程序具有webapp-security.x