我想将一个函数传递给子组件但出现了这个错误。
Invalid value for prop passedFunction on <div> tag. class Parent extends Component { passedFunction(){} render() { <Child passedFunction={this.passedFunction}/> } } class Child extends Component { render() { <div onClick={this.props.passedFunction}></div> } }
基本上这就是我想做的事情。
var ReactGridLayout = require(’react-grid-layout’);
var MyFirstGrid = React.createClass({ passedFunction:function(){} render: function () { return ( <ReactGridLayout className="layout" cols={12} rowHeight={30} width={1200}> <div key="a" data-grid={{x: 0, y: 0, w: 1, h: 2, static: true}}>a</div> <div key="b" data-grid={{x: 1, y: 0, w: 3, h: 2, minW: 2, maxW: 4}}>b</div> <div key="c" data-grid={{x: 4, y: 0, w: 1, h: 2}} passedFunction={this.passedFunction}>c</div> </ReactGridLayout> ) } });
它似乎是在 React v16 中引入的。因此,将函数从父级传递到子级的正确方法是什么?
在 React 中,你可以通过 props 将函数从父组件传递到子组件。你遇到的错误是因为你尝试在 div 元素上直接传递自定义的 passedFunction 属性,而 div 元素不接受该属性。你需要将该函数传递给自定义组件,并确保只在自定义组件中处理它。
div
passedFunction
以下是如何修正你代码的正确示例:
class Parent extends React.Component { passedFunction() { console.log("Function called!"); } render() { return ( <Child passedFunction={this.passedFunction}/> ); } }
class Child extends React.Component { render() { return ( <div onClick={this.props.passedFunction}> Click me to call passed function </div> ); } }
对于你的 ReactGridLayout 示例,你需要确保将 passedFunction 传递给自定义组件,而不是直接传递给 div 元素。你可以创建一个自定义的子组件来处理 passedFunction。
ReactGridLayout
const CustomGridItem = ({ dataGrid, passedFunction, children }) => ( <div data-grid={dataGrid} onClick={passedFunction}> {children} </div> );
import React from 'react'; import ReactGridLayout from 'react-grid-layout'; const MyFirstGrid = React.createClass({ passedFunction: function() { console.log("Grid item clicked!"); }, render: function () { return ( <ReactGridLayout className="layout" cols={12} rowHeight={30} width={1200}> <div key="a" data-grid={{x: 0, y: 0, w: 1, h: 2, static: true}}>a</div> <div key="b" data-grid={{x: 1, y: 0, w: 3, h: 2, minW: 2, maxW: 4}}>b</div> <CustomGridItem key="c" data-grid={{x: 4, y: 0, w: 1, h: 2}} passedFunction={this.passedFunction}> c </CustomGridItem> </ReactGridLayout> ); } }); export default MyFirstGrid;
Parent
Child
onClick
CustomGridItem
data-grid
这样可以确保 passedFunction 被正确传递和调用,而不会引起不必要的错误。