我正在尝试使用React Context将函数传递给嵌套的子组件,这可以有效地允许孩子在按下时更新父状态。
问题是我似乎收到一个错误 ‘TypeError:render不是一个函数。
(在render(newValue)中,render是Array的一个实例”
,控制台中的错误显示为:
“警告:使用多个子对象或不是函数的子对象来渲染上下文使用者。上下文使用者期望一个子函数。如果您确实传递了函数,请确保函数周围没有尾随或前导空格。
我已经看过这个错误以及文档,但是似乎没有答案可以回答我的问题,我无法完全弄清为什么它不起作用。
编辑: 我应该补充的是,有多个子组件呈现,因为它们是由对象数组构建的
片段:
上级:
class Product extends Component {
state = {
selected_ind: 0
};
handleContextChange = selected_ind => {
this.setState({selected_ind});
};
render() {
const contextValue = {
data: this.state,
handleChange: this.handleContextChange
};
//Desconstruct props for ease of use
const {
attr_data,
variant,
product_name } = this.props;
return (
<Container>
<Heading>Product Options</Heading>
<IndexContext.Provider value={contextValue}>
<OptionTile
tileColor='grey'
onPress={ () => this.props.navigation.navigate('Variants', {
attr_data: attr_data,
selected_ind: this.state.selected_ind
})} //Replace with named function
option="Variant"
selected_ind={ this.state.selected_ind }
value={ selected_attr.name } />
</IndexContext.Provider>
<OptionTile
tileColor='grey'
option="Quantity"
value="1" />
</Container>
我想在OptionTile中使用的孩子是:
const VariantTile = (props) => {
return (
<IndexContext.Consumer>
{({ handleChange }) => (
<TouchableOpacity onPress={handleChange(props.index)}>
<AsyncImage
source={ props.img_src }
placeholderColor="#fafafa"
style={{ flex: 1, width: null, height: 200 }}
/>
<Text>{ props.var_name }</Text>
<Text>{ props.price }</Text>
<Text>{ props.sku }</Text>
</TouchableOpacity>
)};
</IndexContext.Consumer>
)
};
上下文组件很简单:
const IndexContext = React.createContext();
export default IndexContext;
由于错误状态,<Consumer>
应该有唯一的孩子,并且应该是一个函数。当它有多个子节点(包括文本节点)时,将显示该错误。
;
嵌入表达式导致问题后。它不是表达式的一部分,使其成为表达式的一部分将导致语法错误。
它应该是:
<IndexContext.Consumer>
{({ handleChange }) => (
<TouchableOpacity onPress={handleChange(props.index)}>
<AsyncImage
source={ props.img_src }
placeholderColor="#fafafa"
style={{ flex: 1, width: null, height: 200 }}
/>
<Text>{ props.var_name }</Text>
<Text>{ props.price }</Text>
<Text>{ props.sku }</Text>
</TouchableOpacity>
)}
</IndexContext.Consumer>
问题内容: 自从我对JavaScript和React感到陌生以来,我确实在找出正确的语法方面遇到了问题。 这是我的问题: 应该调用该函数,但不会。我收到此错误,无法找出原因。回调可以正常工作。 当我尝试这种语法时,在编译时会立即出现错误。那是因为电子书吗? 问题答案: 当您使用ES6类而不是React.createClass时,它不会自动绑定 this 。 之所以: React.createCla
canvas元素并非Canvas中最强大的部分,真正的关键部分是2D渲染上下文,这是你真正绘制图形的地方。canvas元素的用途只是作为2D渲染上下文的包装器,它包含绘图和图形操作所需要的全部方法和丰富功能。理解这一点是很重要的,强调一下:绘图是在2D渲染上下文中进行的,而不是在canvas元素中进行。可以通过canvas元素访问和显示2D渲染上下文。 坐标系统 2D渲染上下文是一种基于屏幕的标准
问题内容: 我有一个应用程序,需要动态设置元素的高度(让我们说“ app-content”)。它获取应用程序“ chrome”的高度,然后减去它的高度,然后将“ app- content”的高度设置为在这些限制内适合100%。这对于香草JS,jQuery或Backbone视图来说非常简单,但是我正在努力弄清楚在React中执行此操作的正确过程是什么? 以下是一个示例组件。我希望能够将的高度设置为窗
问题内容: 我已经实现了一个Modal组件,该组件在屏幕上显示一个模态对话框。通常,模态将有条件地显示。我可以通过两种方法在render函数中执行此操作: 在Modal组件中,我使用this.props.show为其自身添加了一个不同的类。如果为假,它将添加display:none以隐藏模式。 另一种方式是这样的: 这用于确定是否在渲染中添加Modal。 我想找出的是: 这两种方式有何不同? 其中
所以就像标题所说的,我的应用程序的主页因为某种原因渲染了两次,我不知道为什么。从我的浏览器路由器,我最初调用一个JS文件,从那里我调用我的HomePage组件和React路由器,但然后我的页面渲染两次,我不知道为什么。 我的浏览器路由器(index.js): 然后pp.js被称为: 然后我的主页组件(index.jsx): 和路线。js: 但是我的页面是这样渲染的: 我真的很困惑,所以任何建议都会
在代码示例中,在 当react遇到路由组件(react路由器的一部分)的渲染道具时,它会传递什么道具? 鉴于https://reactjs.org/docs/render-props.html ,render prop是一个函数prop,组件使用它来知道要渲染什么,是传递给props的值,该props埋在react router中的Route声明中