将过滤后的值传递给 react render()
Passing filtered value to react render()
我使用 react-datagrid 来表示我的文档 table,但我不知道如何使用完整数据实例化 render() 范围。它总是在没有数据的情况下实例化。
这是我的数据网格
'use strict';
var React = require('react')
var DataGrid = require('react-datagrid')
var columns = [
{ name: 'id', title: '#', width: 50 },
{ name: 'business_id', flex: 1 },
{ name: 'lastName' },
{ name: 'city', flex: 1 },
{ name: 'country', flex: 1 },
{ name: 'email', width: 200 }
]
var App = React.createClass({
initData: function(documents){
if(documents){
return documents;
} else {
console.log('documents: '+ this.props.documents);
return this.props.documents;
}
},
getInitialState: function(){
return {
dataSource: [],
}
},
componentDidMount() {
this.setState({
dataSource: this.initData()
})
},
render: function(){
console.log('this.props.documents: '+ this.props.documents)
return <DataGrid
idProperty='id'
dataSource={this.initData()}
columns={columns}
style={{height: 400}}
onFilter={this.handleFilter}
liveFilter={true} //to apply the filter while typing
/>
},
handleFilter: function(column, value, allFilterValues){
//reset data to original data-array
var data = this.initData()
//go over all filters and apply them
Object.keys(allFilterValues).forEach(function(name){
var columnFilter = (allFilterValues[name] + '').toUpperCase()
if (columnFilter == ''){
return
}
data = data.filter(function(item){
if ((item[name] + '').toUpperCase().indexOf(columnFilter) === 0){
return true
}
})
})
this.initData(data)
this.setState({})
}
})
第一个控制台日志returns没什么
documents:
render()中的控制台日志returns数据
this.props.documents:[object Object],[object Object],[object Object],[object Object],[object Object]
这就是我从主组件调用数据网格组件的方式
<DocumentReactNewGrid documents={this.state.documents}/>
将数据源设为 state
。在过滤器上,将新数据设置为 state
。这将使用新数据重新呈现组件。
'use strict';
var React = require('react')
var DataGrid = require('react-datagrid')
var columns = [
{ name: 'id', title: '#', width: 50 },
{ name: 'business_id', flex: 1 },
{ name: 'lastName' },
{ name: 'city', flex: 1 },
{ name: 'country', flex: 1 },
{ name: 'email', width: 200 }
]
var App = React.createClass({
initData: function(documents){
if(documents){
return documents;
} else {
return this.props.documents;
}
},
getInitialState: function(){
return {
dataSource: this.initData(),
}
},
componentWillReceiveProps(nextProps) {
this.setState({
dataSource: nextProps.documents,
})
},
render: function(){
return <DataGrid
idProperty='id'
dataSource={this.state.dataSource}
columns={columns}
style={{height: 400}}
onFilter={this.handleFilter}
liveFilter={true} //to apply the filter while typing
/>
},
handleFilter: function(column, value, allFilterValues){
//reset data to original data-array
var data = this.initData()
//go over all filters and apply them
Object.keys(allFilterValues).forEach(function(name){
var columnFilter = (allFilterValues[name] + '').toUpperCase()
if (columnFilter == ''){
return
}
data = data.filter(function(item){
if ((item[name] + '').toUpperCase().indexOf(columnFilter) === 0){
return true
}
})
})
this.setState({
dataSource: data
})
}
})
希望对您有所帮助!
我使用 react-datagrid 来表示我的文档 table,但我不知道如何使用完整数据实例化 render() 范围。它总是在没有数据的情况下实例化。
这是我的数据网格
'use strict';
var React = require('react')
var DataGrid = require('react-datagrid')
var columns = [
{ name: 'id', title: '#', width: 50 },
{ name: 'business_id', flex: 1 },
{ name: 'lastName' },
{ name: 'city', flex: 1 },
{ name: 'country', flex: 1 },
{ name: 'email', width: 200 }
]
var App = React.createClass({
initData: function(documents){
if(documents){
return documents;
} else {
console.log('documents: '+ this.props.documents);
return this.props.documents;
}
},
getInitialState: function(){
return {
dataSource: [],
}
},
componentDidMount() {
this.setState({
dataSource: this.initData()
})
},
render: function(){
console.log('this.props.documents: '+ this.props.documents)
return <DataGrid
idProperty='id'
dataSource={this.initData()}
columns={columns}
style={{height: 400}}
onFilter={this.handleFilter}
liveFilter={true} //to apply the filter while typing
/>
},
handleFilter: function(column, value, allFilterValues){
//reset data to original data-array
var data = this.initData()
//go over all filters and apply them
Object.keys(allFilterValues).forEach(function(name){
var columnFilter = (allFilterValues[name] + '').toUpperCase()
if (columnFilter == ''){
return
}
data = data.filter(function(item){
if ((item[name] + '').toUpperCase().indexOf(columnFilter) === 0){
return true
}
})
})
this.initData(data)
this.setState({})
}
})
第一个控制台日志returns没什么
documents:
render()中的控制台日志returns数据
this.props.documents:[object Object],[object Object],[object Object],[object Object],[object Object]
这就是我从主组件调用数据网格组件的方式
<DocumentReactNewGrid documents={this.state.documents}/>
将数据源设为 state
。在过滤器上,将新数据设置为 state
。这将使用新数据重新呈现组件。
'use strict';
var React = require('react')
var DataGrid = require('react-datagrid')
var columns = [
{ name: 'id', title: '#', width: 50 },
{ name: 'business_id', flex: 1 },
{ name: 'lastName' },
{ name: 'city', flex: 1 },
{ name: 'country', flex: 1 },
{ name: 'email', width: 200 }
]
var App = React.createClass({
initData: function(documents){
if(documents){
return documents;
} else {
return this.props.documents;
}
},
getInitialState: function(){
return {
dataSource: this.initData(),
}
},
componentWillReceiveProps(nextProps) {
this.setState({
dataSource: nextProps.documents,
})
},
render: function(){
return <DataGrid
idProperty='id'
dataSource={this.state.dataSource}
columns={columns}
style={{height: 400}}
onFilter={this.handleFilter}
liveFilter={true} //to apply the filter while typing
/>
},
handleFilter: function(column, value, allFilterValues){
//reset data to original data-array
var data = this.initData()
//go over all filters and apply them
Object.keys(allFilterValues).forEach(function(name){
var columnFilter = (allFilterValues[name] + '').toUpperCase()
if (columnFilter == ''){
return
}
data = data.filter(function(item){
if ((item[name] + '').toUpperCase().indexOf(columnFilter) === 0){
return true
}
})
})
this.setState({
dataSource: data
})
}
})
希望对您有所帮助!