2016-12-03 96 views
0

我有一个TourEditor类,它是儿童和TourEditor类的父级,它在提交时处理表单。我希望父tourEditor在孩子中调用函数updateFiles(files)时更新组件对象,但不幸的是,它只保存孩子的初始状态并且不更新状态。关于如何解决这个问题的任何想法?当孩子/父母更改状态时更新父级

TourEditor.js

export default class TourEditor extends React.Component { 

    constructor(props){ 
    super(props); 
    this.state = {"files": []}; 
    this.updateFiles = this.updateFiles.bind(this); 
    } 

    componentDidMount() { 
    tourEditor({ component: this }); 
    } 

    updateFiles(files) { 
     this.setState({ 
      files: files 
     }); 
    } 

    render() { 
    const { tour } = this.props; 
    return (<form 
     ref={ form => (this.tourEditorForm = form) } 
     onSubmit={ event => event.preventDefault() } 
    > 
     <FormGroup> 
     //.... 
     </FormGroup> 
    </form>); 
    } 
} 

tourEditor.js

export default function tourEditor(options) { 
    console.log(options); 
    component = options.component; 
    validate(); 
} 
+0

我没有看到你打电话'updateFiles',你应该包括它太 – Khang

回答

1

我想你需要matb33:收集钩

这个包在服务器上运行,并允许您执行操作在数据库更新之前或之后。因此,例如,您可以在更新子记录时更新父项。

下面是一个例子,我重新计算的专辑照片的数量当任何照片的变化:

var photoUpdate = function(userId,doc) { 
    // console.log("Updating photo counts for album "+doc.albumid); 
    var photoCount = Photos.find({ 
     albumid: doc.albumid 
    }).count(); 
    Albums.update({_id: doc.albumid},{ 
     $set:{ 
      photoCnt: photoCount 
     } 
    }); 
} 

Photos.after.insert(function (userId, doc) { 
    photoUpdate(userId,doc); 
}) 

Photos.after.update(function (userId, doc) { 
    photoUpdate(userId,doc); 
}) 

Photos.after.remove(function (userId, doc) { 
    photoUpdate(userId,doc); 
})