Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 特定组件的触发函数-ReactJS_Javascript_Reactjs - Fatal编程技术网

Javascript 特定组件的触发函数-ReactJS

Javascript 特定组件的触发函数-ReactJS,javascript,reactjs,Javascript,Reactjs,我的场景是:我有一个项目列表,每个项目呈现一个组件。每次单击其中一个项目时,我都会渲染另一个组件(非常类似于模式),将当前项目作为道具传递。在模态组件内部有一个on按钮,单击该按钮时,应该会在创建它的组件上触发回一个函数 我的物品是: const items = [ { id: 1, data: "some data" }, { id: 2, data: "some data"

我的场景是:我有一个项目列表,每个项目呈现一个组件。每次单击其中一个项目时,我都会渲染另一个组件(非常类似于模式),将当前项目作为道具传递。在模态组件内部有一个on按钮,单击该按钮时,应该会在创建它的组件上触发回一个函数

我的物品是:

const items = [
    {
        id: 1,
        data: "some data"
    }, {
        id: 2,
        data: "some data"
    }, {
        id: 3,
        data: "some data"
    }
]
将每个项目动态创建为组件:

items.map(item => {
                return { key: item.id, content: <Item key={item.id} ItemObject={item}/> }
            });
在Actions组件中有一个按钮,单击该按钮时,应该会在调用Actions的项中触发回updateStatus

Actions.js

export function _updateStatus(newFlags) {
    this.setState({ flags: newFlags });
}

export default class SystemUnit extends React.Component {
    constructor(props) {
        super(props);
        this.state = { flags: [] };
        _updateStatus = _updateStatus.bind(this);
        this.handleClick = this.handleClick.bind(this);
    }
    handleClick() {
        ReactDOM.render(<Actions Item={this.props.ItemObject} />, document.getElementsByClassName("actions-wrapper")[0]);
    }
}
import { _updateStatus } from './Item';

export default class Actions extends React.Component {
    constructor(props) {
        super(props);
    this.state = {flags: []}
    }
    render() {
        <button onClick={() => { _updateStatus(this.state.flags) }}>Finish</button>
    }
}
从'./Item'导入{u updateStatus};
导出默认类操作扩展React.Component{
建造师(道具){
超级(道具);
this.state={flags:[]}
}
render(){
{{u updateStatus(this.state.flags)}>Finish
}
}
但是,该按钮会在列表的最后一项上触发该方法,而不是在呈现它的组件上。在这个例子中,我有三个项目,无论单击哪一个,Action component按钮都会触发项目3上的cange


如何为Action组件指定在呈现它的Item组件上触发updateStatus方法?

通过以下行从组件本身导入函数:

import { _updateStatus } from './Item';
这就是为什么要获得最后渲染的
项的函数

请尝试将函数作为参数传递:

 ReactDOM.render(<Actions Item={this.props.ItemObject} updateStatus={this._updateStatus} />, document.getElementsByClassName("actions-wrapper")[0]);
ReactDOM.render(,document.getElementsByClassName(“操作包装器”)[0]);
以及在以下操作中的访问权限:

render() {
    <button onClick={() => { this.props.updateStatus(this.state.flags) }}>Finish</button>
}
render(){
{this.props.updateStatus(this.state.flags)}>Finish
}

谢谢!成功了。从组件本身导入函数是我在某个论坛上看到的。不过,这种方式更干净。是的,利用道具的力量。快乐编码!