Nat*_*ari 5 javascript reactjs
我正在使用react-awesome-query-builder来构建查询和搜索。当我再次登录应用程序时,我想在同一搜索中显示之前输入的查询。我的意思是一些默认选择的标准。我用谷歌搜索了一种实现方法,但不幸的是我不明白。下面是代码
class QueryProcessor extends Component{
constructor(props){
super(props);
this.state={
query:null,
}
this.getChildren=this.getChildren.bind(this);
let query=null;
let mainDate=null;
}
getChildren(props) {
this.query=QbUtils.queryString(props.tree, props.config);
return (
<div>
<div className="query-builder">
<Builder {...props} />
</div>
</div>
)
}
onChange(tree) {
//here you can save tree object:
// var treeJSON = transit.toJSON(tree);
console.log("tree",tree);
}
render(){
let mainData=this.props.rulingList?this.props.rulingList:null;
console.log("mainData",mainData);
return(
<div className="page-content container-fluid header-master">
<div className="content content-background">
<div className="col-md-12 custom-back-white header-master">
<br/>
<div className="">
<h1> Query Builder</h1><br/>
<Query
{...config}
//you can pass object here, see treeJSON at onChange
// value=transit.fromJSON(treeJSON)
get_children={this.getChildren}
onChange={this.onChange}
></Query><br/>
<div className="pull-right">
<button type="button" className="btn btn-success" onClick={()=>{this.props.ListByQuery(this.query)}} >Search</button>
</div>
<br/>
</div>
</div>
</div>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
你能帮我实施一下吗?提前致谢
好吧,在演示中,提供了两种用于序列化和加载树的方法 https://github.com/ukrbublik/react-awesome-query-builder/blob/master/examples/demo/demo.js#L18
我尝试过使用transit-immutable-js的第二种方法
serializeTree = transit.toJSON;
loadTree = transit.fromJSON;
Run Code Online (Sandbox Code Playgroud)
这是一个Formik字段组件,您可以像这样使用
<Field
name="condition"
component={QueryBuilder}
fields={fields}
label="Conditions"
/>
Run Code Online (Sandbox Code Playgroud)
组件:
/* eslint-disable jsx-a11y/label-has-for */
import React from 'react';
import PropTypes from 'prop-types';
import get from 'lodash.get';
import { Query, Builder, Utils as QbUtils } from 'react-awesome-query-builder';
import transit from 'transit-immutable-js';
import 'react-awesome-query-builder/css/styles.scss';
import 'react-awesome-query-builder/css/compact_styles.scss';
import { Form } from 'react-bootstrap';
import config from './config';
const QueryBuilder = ({
field,
form: { touched, errors, setFieldValue },
type,
id,
label,
className,
fields,
...props
}) => {
const getChildren = queryProps => {
return (
<div className="query-builder">
<Builder {...queryProps} />
</div>
);
};
return (
<Form.Group className={className} controlId={field.name}>
{label && <Form.Label>{label}</Form.Label>}
<Form.Control
as={Query}
get_children={getChildren}
isInvalid={get(touched, field.name) && get(errors, field.name)}
onChange={tree => {
setFieldValue(field.name, {
tree: transit.toJSON(tree),
mongo: JSON.stringify(
QbUtils.mongodbFormat(tree, { ...config, fields })
)
});
}}
fields={fields}
{...config}
{...props}
value={field.value ? transit.fromJSON(field.value.tree) : null}
/>
<Form.Control.Feedback type="invalid">
{get(errors, field.name)}
</Form.Control.Feedback>
</Form.Group>
);
};
QueryBuilder.propTypes = {
field: PropTypes.object.isRequired,
form: PropTypes.object.isRequired,
fields: PropTypes.object.isRequired,
type: PropTypes.string,
className: PropTypes.string,
id: PropTypes.string.isRequired,
error: PropTypes.string,
label: PropTypes.string,
onChange: PropTypes.func.isRequired,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
};
QueryBuilder.defaultProps = {
type: 'input',
className: '',
value: null,
label: null,
error: null
};
export default QueryBuilder;
Run Code Online (Sandbox Code Playgroud)
示例配置文件:https://github.com/ukrbublik/react-awesome-query-builder#config-format
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |