react项目可以引入jstree插件吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react项目可以引入jstree插件吗相关的知识,希望对你有一定的参考价值。
jstree是基于jquery的插件,是需要和dom元素打交道的。要使用的话需要先引入jquery。你可以在你的react模板页面中直接引入jquery和jstree。在你需要用到的组件里用ref拿到对应元素,调用jstree的初始化方法就可以。一般要在componentDidMount中初始化。 参考技术A 可以,你可以先把jstree封装成一个符合你业务需求的react组件,然后在其他组件中调用封装好的组件。
封装时,
在componentDidMount、componentDidUpdate处理外部组件对树的操作,
在shouldComponentUpdate中始终返回false,防止react刷新组件
在componentDidMount中将树的事件通过props中的事件函数返回给父组件
在componentWillUnmount中处理树的销毁,事件的解绑等操作 参考技术B 可以,react主要是用数据控制页面,但有时候需要批量操作dom的情况下ref并不好用
JQuery/JS插件 jsTree 常用方法
插件:https://www.jstree.com/plugins/
插件checkbox的配置:https://www.jstree.com/api/#/?q=$.jstree.defaults.checkbox&f=$.jstree.defaults.checkbox.tie_selection
var instance = $(‘#plugins1‘).jstree(true);//获取jstree对象 instance.deselect_all();//取消选中 instance.select_node(‘22‘);//选中指定节点 instance.hide_checkboxes();//隐藏所有的checkbox console.log(instance.get_checked_descendants (22));//获取 当前节点下的 子节点 instance.check_all();//选中 所有节点 instance.uncheck_all();//取消选中的 所有节点 console.log(instance.get_checked(false));//获取 所有选中的节点 参数:true(返回对象) false/null(返回ids) console.log(instance.get_top_checked());//获取顶层选中的节点
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div id="plugins1"></div> <link href="dist/themes/default/style.min.css" rel="stylesheet" /> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script> <script src="dist/jstree.min.js"></script> <script type="text/javascript"> //Checkbox plugin $(function () { //$(‘#jstreeModule1111‘).jstree({ // ‘core‘: { // ‘data‘: data, // ‘expand_selected_onload‘: false,//加载完成后默认展开所有选中节点true为选中 false为不展开 // ‘themes‘: { // dots: true //取消连接线 // } // }, // plugins: ["checkbox", "themes",], // checkbox: { // "keep_selected_style": false,// 保持选中样式 true为保持,false为不保存,样式不影响功能 // ‘three_state‘: true,//父子节点关联,true为关联,false为不关联 // ‘tie_selection‘: false, // // ‘whole_node‘: false,//复选框与节点关联 true 为关联 false为不关联 // }, // lang: { // loading: "目录加载中……" //在用户等待数据渲染的时候给出的提示内容,默认为loading // }, //}); $("#plugins1").jstree({ "checkbox": { //"keep_selected_style": true//显示选中的样式 //"keep_selected_style": false,// 保持选中样式 true为保持,false为不保存,样式不影响功能 ‘three_state‘: true,//父子节点关联,true为关联,false为不关联 ‘tie_selection‘: false, // ‘whole_node‘: false,//复选框与节点关联 true 为关联 false为不关联 }, "plugins": ["checkbox"],//加载插件 checkbox ‘core‘: { ‘expand_selected_onload‘: true,//加载完成后默认展开所有选中节点true为选中 false为不展开 ‘themes‘: { dots: true //取消连接线 }, ‘data‘: [ { "text": "Root node 1", "id": "1", "state": { "opened": true }, "children": [ { "text": "Child node 11", "id": "11", "state": { "opened": true, //"selected": false//默认不选中 } }, { "text": "Child node 22", "id": "22", "state": { "opened": true, //"selected": true,//默认选中 //"checked": true }, "children": [ { "text": "Child node 221", "id": "221", "state": { "opened": true } }, { "text": "Child node 222", "id": "222", "state": { "opened": true }, } ] }, { "text": "Child node 33", "id": "33", "state": { "opened": true, //"selected": true,//默认选中 //"checked": true } } ] } ] } }); //checkbox 选中事件 $(‘#plugins1‘).on("check_node.jstree", function (node, data, event) { //console.log(data); ////注意:这个是有问题的 算是bug吧 //console.log(data.selected);//获取 选中的 所有节点 //下面这个 获取选中的节点没问题 var instance = $(‘#plugins1‘).jstree(true);//获取jstree对象 console.log(instance.get_checked(false));//获取 所有选中的节点 参数:true(返回对象) false/null(返回ids) var d = instance.get_checked(false); var i = 1; }); //checkbox 取消选中事件 $(‘#plugins1‘).on("uncheck_node.jstree", function (node, data, event) { //console.log(data); ////注意:这个是有问题的 算是bug吧 //console.log(data.selected);//获取 选中的 所有节点 //下面这个 获取选中的节点没问题 var instance = $(‘#plugins1‘).jstree(true);//获取jstree对象 console.log(instance.get_checked(false));//获取 所有选中的节点 参数:true(返回对象) false/null(返回ids) var d = instance.get_checked(false); var i = 1; }); //$(‘#plugins1‘).on("changed.jstree", function (e, data) { // console.log(data); // if (data.hasOwnProperty(‘node‘) && data.node.hasOwnProperty(‘children_d‘)) { // console.log(data.node.children_d);//所有选中的子节点(不包含当前节点) // } // console.log(data.selected);//当前tree 所有选中的 节点(包含当前节点) //}); //setTimeout(function () { // var instance = $(‘#plugins1‘).jstree(true);//获取jstree对象 // //instance.deselect_all();//取消选中 // //instance.select_node(‘22‘);//选中指定节点 // //instance.hide_checkboxes();//隐藏所有的checkbox // //console.log(instance.get_checked_descendants (22));//获取 当前节点下的 子节点 // //instance.check_all();//选中 所有节点 // //instance.uncheck_all();//取消选中的 所有节点 // //console.log(instance.get_checked(false));//获取 所有选中的节点 参数:true(返回对象) false/null(返回ids) // //console.log(instance.get_top_checked());//获取顶层选中的节点 //}, 1000); }); </script> </body> </html>
以上是关于react项目可以引入jstree插件吗的主要内容,如果未能解决你的问题,请参考以下文章
uni-app 项目引入第三方js插件,单个js文件引入成功,调用该插件方法