我正在尝试理解我从一个包[https://github.com/Revln9/react-agenda/blob/master/example/src/agenda/agenda.js][1]中找到的这段代码,因为我需要制定一个计划,在这个计划中,我可以在某些日子发布数据,并将其上传到数据库并根据用户进行检索
1.我想知道为什么处理事件函数,如HandleItemchange,HandleItemSize,removeEvent,AddnewEvent,changeview等……有两个参数,但大多数情况下只使用一个参数。
2.另一个问题是changeView函数通过使用传入天数的值来设置numberOfDays,但是当您查看按钮类时,它有onClick={this.changeView.bind( null,7)}>,它在几天内传递一个null,那么这是如何工作的呢?
3.如果我使用这个包,但为我的学校项目修改它,会不会是抄袭?除了bootstrap之外,我从来没有在自己的项目中实现过包。
import React, { Component } from 'react';
import moment from 'moment';
import { ReactAgenda , ReactAgendaCtrl, guid , getUnique , getLast , getFirst , Modal } from 'react-agenda';
var now = new Date();
require('moment/locale/fr.js');
var colors= {
'color-1':"rgba(102, 195, 131 , 1)" ,
"color-2":"rgba(242, 177, 52, 1)" ,
"color-3":"rgba(235, 85, 59, 1)" ,
"color-4":"rgba(70, 159, 213, 1)",
"color-5":"rgba(170, 59, 123, 1)"
}
var items = [
{
_id :guid(),
name : 'Meeting , dev staff!',
startDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0),
endDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate(), 12, 0),
classes : 'color-1 color-4'
},
{
_id :guid(),
name : 'Working lunch , Holly',
startDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+1, 11, 0),
endDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+1, 13, 0),
classes : 'color-2'
},
{
_id :guid(),
name : 'Conference , plaza',
startDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+1, 11 , 0),
endDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+1, 14 ,30),
classes : 'color-4'
},
{
_id :'event-4',
name : 'Customers issues review',
startDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+2, 10, 0),
endDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+2, 15, 0),
classes : 'color-3'
},
{
_id :'event-5',
name : 'Group activity',
startDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+3, 10, 0),
endDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+3, 16, 30),
classes : 'color-4'
},
{
_id :'event-6',
name : 'Fun Day !',
startDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+7, 9, 14),
endDateTime : new Date(now.getFullYear(), now.getMonth(), now.getDate()+7, 17),
classes : 'color-3'
}
];
export default class Agenda extends Component {
constructor(props){
super(props);
this.state = {
items:[],
selected:[],
cellHeight:(60 / 4),
showModal:false,
locale:"fr",
rowsPerHour:4,
numberOfDays:4,
startDate: new Date()
}
this.handleRangeSelection = this.handleRangeSelection.bind(this)
this.handleItemEdit = this.handleItemEdit.bind(this)
this.zoomIn = this.zoomIn.bind(this)
this.zoomOut = this.zoomOut.bind(this)
this._openModal = this._openModal.bind(this)
this._closeModal = this._closeModal.bind(this)
this.addNewEvent = this.addNewEvent.bind(this)
this.removeEvent = this.removeEvent.bind(this)
this.editEvent = this.editEvent.bind(this)
this.changeView = this.changeView.bind(this)
this.handleCellSelection = this.handleCellSelection.bind(this)
}
componentDidMount(){
this.setState({items:items})
}
componentWillReceiveProps(next , last){
if(next.items){
this.setState({items:next.items})
}
}
handleItemEdit(item, openModal) {
if(item && openModal === true){
this.setState({selected:[item] })
return this._openModal();
}
}
handleCellSelection(item, openModal) {
if(this.state.selected && this.state.selected[0] === item){
return this._openModal();
}
this.setState({selected:[item] })
}
zoomIn(){
var num = this.state.cellHeight + 15
this.setState({cellHeight:num})
}
zoomOut(){
var num = this.state.cellHeight - 15
this.setState({cellHeight:num})
}
handleDateRangeChange (startDate, endDate) {
this.setState({startDate:startDate })
}
handleRangeSelection (selected) {
this.setState({selected:selected , showCtrl:true})
this._openModal();
}
_openModal(){
this.setState({showModal:true})
}
_closeModal(e){
if(e){
e.stopPropagation();
e.preventDefault();
}
this.setState({showModal:false})
}
handleItemChange(items , item){
this.setState({items:items})
}
handleItemSize(items , item){
this.setState({items:items})
}
removeEvent(items , item){
this.setState({ items:items});
}
addNewEvent (items , newItems){
this.setState({showModal:false ,selected:[] , items:items});
this._closeModal();
}
editEvent (items , item){
this.setState({showModal:false ,selected:[] , items:items});
this._closeModal();
}
changeView (days , event ){
this.setState({numberOfDays:days})
}
render() {
var AgendaItem = function(props){
console.log( ' item component props' , props)
return <div style={{display:'block', position:'absolute' , background:'#FFF'}}>{props.item.name} <button onClick={()=> props.edit(props.item)}>Edit </button></div>
}
return (
<div className="content-expanded ">
<div className="control-buttons">
<button className="button-control" onClick={this.zoomIn}> <i className="zoom-plus-icon"></i> </button>
<button className="button-control" onClick={this.zoomOut}> <i className="zoom-minus-icon"></i> </button>
<button className="button-control" onClick={this._openModal}> <i className="schedule-icon"></i> </button>
<button className="button-control" onClick={this.changeView.bind(null , 7)}> {moment.duration(7, "days").humanize()} </button>
<button className="button-control" onClick={this.changeView.bind(null , 4)}> {moment.duration(4, "days").humanize()} </button>
<button className="button-control" onClick={this.changeView.bind(null , 3)}> {moment.duration(3, "days").humanize()} </button>
<button className="button-control" onClick={this.changeView.bind(null , 1)}> {moment.duration(1, "day").humanize()} </button>
</div>
<ReactAgenda
minDate={new Date(now.getFullYear(), now.getMonth()-3)}
maxDate={new Date(now.getFullYear(), now.getMonth()+3)}
startDate={this.state.startDate}
startAtTime={10}
cellHeight={this.state.cellHeight}
locale="fr"
items={this.state.items}
numberOfDays={this.state.numberOfDays}
headFormat={"ddd DD MMM"}
rowsPerHour={this.state.rowsPerHour}
itemColors={colors}
//itemComponent={AgendaItem}
view="calendar"
autoScale={false}
fixedHeader={true}
onRangeSelection={this.handleRangeSelection.bind(this)}
onChangeEvent={this.handleItemChange.bind(this)}
onChangeDuration={this.handleItemSize.bind(this)}
onItemEdit={this.handleItemEdit.bind(this)}
onCellSelect={this.handleCellSelection.bind(this)}
onItemRemove={this.removeEvent.bind(this)}
onDateRangeChange={this.handleDateRangeChange.bind(this)} />
{
this.state.showModal? <Modal clickOutside={this._closeModal} >
<div className="modal-content">
<ReactAgendaCtrl items={this.state.items} itemColors={colors} selectedCells={this.state.selected} Addnew={this.addNewEvent} edit={this.editEvent} />
</div>
</Modal>:''
}
</div>
);
}
}发布于 2018-07-18 17:58:52
虽然所有这些问题都是基于观点的,但我会尝试为您提供一些指导。
bind函数中上下文的一个参数。所以基本上他只是用7天作为参数来调用这个函数。更多的解释,你可以查看this answer发布于 2018-07-18 18:01:26
1.你可以定义任意多的参数,但是当你没有给它们赋值时,它们就是未定义的(See here)。他们为什么在这里使用这个可能有很多原因,但我看不出有任何正确的答案。
2. .bind的定义是这样的:此行的.bind(thisArg[, arg1[, arg2[, ...]]])将函数绑定到null,并给出7天的参数。
3.通常不会,但要确保在项目中寻找许可证。在您的情况下,许可如下:
麻省理工学院
许可证(麻省理工学院)
版权所有(c) 2016
特此免费授予任何获得本软件副本及相关文档文件(以下简称“本软件”)的人使用本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,以及允许获得本软件的人员这样做的权利,但须遵守以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
软件按“原样”提供,没有任何明示或暗示的担保,包括但不限于适销性、特定用途的适用性和不侵权的担保。在任何情况下,作者或版权所有者均不对因软件或在软件中的使用或其他交易而引起、产生或与之相关的任何索赔、损害赔偿或其他责任承担责任,无论是合同诉讼、侵权诉讼还是其他诉讼。
找到here。为了绝对确定你可以在你的项目中提到这个项目。
https://stackoverflow.com/questions/51398654
复制相似问题