javascript - React 编码需要解释
问题描述
我试图理解我从包中找到的这段代码 [ https://github.com/Revln9/react-agenda/blob/master/example/src/agenda/agenda.js][1]因为我需要制作一个安排我可以将数据发布到特定日期并将其上传到数据库并根据用户检索的位置
1. 我想知道 Handle 事件函数(如 HandleItemchange、HandleItemSize、removeEvent、AddnewEvent、changeview 等)为什么有 2 个参数,但大多数时候只使用一个参数。
2.另一个问题是 changeView 函数设置 numberOfDays 通过使用传递到天的值,但是当您查看按钮类时,它有 onClick={this.changeView.bind(null, 7)}> 传递一个空值天那么它是如何工作的呢?
3.如果我使用这个包但是为我的学校项目修改它,会不会是抄袭?在引导之前从未将包实现到我自己的项目中。
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>
);
}
}
解决方案
尽管所有这些问题都是基于意见的,但我会尽力为您提供一些指导。
- 可能只是复制粘贴或错字,这只是一个示例,而不是“使用最佳实践示例”
- 这不是空天过去,它只是函数中上下文的参数
bind
。所以基本上他只是用 7 天作为参数调用这个函数。有关其他说明,您可以查看此答案 - 许可证是麻省理工学院,并允许它,所以我不明白你为什么不能。前进!
推荐阅读
- react-native - 不变量违规错误:超出最大更新深度
- python - 如果我想在特定列上按总和聚合,如何在 python 中应用“groupby”?
- node.js - 使用网络钩子和令牌授权 WordPress 网站和 React 应用程序?
- jquery - 使用metro ui验证后如何使用jquery ajax提交表单
- angular - 如何将下拉值作为参数传递?
- javascript - 根据输入文本更新 URL
- android - 切换昼夜切换开关以强制主题
- python - IndexError:列表分配索引超出范围'xxx';'xxx'
- android - MediaBrowserServiceCompat 的 onGetroot() 方法的返回类型?
- git - Git 流程和功能分支的同步