簡體   English   中英

如何解決錯誤 Cannot assign to read only property 'defaults' of object '[object Object]' in react and grapesjs?

[英]How to resolve error Cannot assign to read only property 'defaults' of object '[object Object]' in react and grapesjs?

我正在將下拉 web 構建器與 react 和 grapesjs 集成,但在初始化 grapesjs 時出現錯誤

這是我的編輯器組件

import React, { useEffect, useState } from "react";
import { useParams } from "react-router-dom";
import axios from "axios";
import { useSelector } from "react-redux";
import { API_HOST } from "./api_utils";
import Sidebar from "./components/Sidebar";
import TopNav from "./components/TopNav";
import geditorConfig from "./api_utils/geditor_config";
import PageSection from "./components/PageSection";

const Editor = () => {
  const [editor, setEditor] = useState(null);
  const [assets, setAssets] = useState([]);
  const { pageId } = useParams();

  const { pageStore } = useSelector((state) => state);
  const { pages } = pageStore;

  useEffect(() => {
    async function getAllAssets() {
      try {
        const response = await axios.get(`${API_HOST}assets/`);
        setAssets(response.data);
      } catch (error) {
        setAssets(error.message);
      }
    }

    getAllAssets();
  }, []);

  useEffect(() => {
    const editor = geditorConfig(assets, pageId); // Getting error at this line
    setEditor(editor);
  }, [pageId, assets]);
  return (
    <div className="App">
      <div
        id="navbar"
        className="sidenav d-flex flex-column overflow-scroll position-fixed"
      >
        <nav className="navbar navbar-light">
          {/* <div className="container-fluid">
            <span className="navbar-brand mb-0 h3 logo">Code Dexterous</span>
          </div> */}
        </nav>
        <PageSection pages={pages} />
        <Sidebar />
      </div>
      <div
        className="main-content position-relative w-85 start-15"
        id="main-content"
      >
        <TopNav />
        <div id="editor"></div>
      </div>
    </div>
  );
};

這是我的 geditorConfig 方法

const geditorConfig = (assets, pageId) => {
  $(".panel__devices").html("");
  $(".panel__basic-actions").html("");
  $(".panel__editor").html("");
  $("#blocks").html("");
  $("#styles-container").html("");
  $("#layers-container").html("");
  $("#trait-container").html("");

  // Content for Preview
  const navbar = $("#navbar");
  const mainContent = $("#main-content");
  const panelTopBar = $("#main-content > .navbar-light");

  const editor = grapesjs.init({ // GETTING ERROR HERE 
    container: "#editor",
    blockManager: {
      appendTo: "#blocks",
    },
    styleManager: styleManager,
    layerManager: layerManager,
    traitManager: traitManager,
    selectorManager: selectorManager,
    panels: panels,
    deviceManager: deviceManager,
    assetManager: { assets: assets, upload: false },
    storageManager: storageSetting(pageId),
    canvas: {
      styles: styles,
      scripts: scripts,
    },
    plugins: [
      tailwindComponent,
      gjsBlockBasic,
      swiperComponent,
      grapesjsBlockBootstrap,
      grapesjsPluginExport,
      grapesjsStyleBg,
      chartLibComponent,
    ],
    pluginsOpts: {
      tailwindComponent: {},
      gjsBlockBasic: {},
      swiperComponent: {},
      grapesjsBlockBootstrap: {},
      grapesjsPluginExport: {},
      grapesjsStyleBg: {},
      chartLibComponent: {},
    },
  });

  addEditorCommand(editor);
  editor.on("run:preview", () => {
    console.log("It will trigger when we click on preview icon");
    // This will be used to hide border
    editor.stopCommand("sw-visibility");
    // This will hide the sidebar view
    navbar.removeClass("sidebar");
    // This will make the main-content to be full width
    mainContent.removeClass("main-content");

    // This will hide top panel where we have added the button
    panelTopBar.addClass("d-none");
  });
  editor.on("stop:preview", () => {
    // This event is reverse of the above event.
    console.log("It will trigger when we click on cancel preview icon");
    editor.runCommand("sw-visibility");
    navbar.addClass("sidebar");
    mainContent.addClass("main-content");
    panelTopBar.removeClass("d-none");
  });
  editor.on("component:selected", (component) => {
    const newTool = {
      icon: "fa fa-plus-square",
      title: "Check Toolbar",
      commandName: "new-tool-cmd",
      id: "new-tool",
    };

    const defaultToolbar = component.get("toolbar");
    const checkAlreadyExist = defaultToolbar.find(
      (toolbar) => toolbar.command === newTool.commandName
    );
    if (!checkAlreadyExist) {
      defaultToolbar.unshift({
        id: newTool.id,
        attributes: { class: newTool.icon, title: newTool.title },
        command: newTool.commandName,
      });
      component.set("toolbar", defaultToolbar);
    }
  });

  setTimeout(() => {
    let categories = editor.BlockManager.getCategories();
    categories.each((category) => category.set("open", false));
  }, 2000);
  return editor;
};

這是我得到的錯誤

我正在嘗試集成網站構建器並使用 mongodb 來存儲所有創建的頁面,我正在渲染存儲的內容以編輯上一頁和主頁上添加的功能以添加新頁面

這對我有用

            const types = editor.DomComponents.getTypes();

            types.forEach((cy: any) => {
                editor.DomComponents.addType(cy.id, {
                    model: {
                        defaults: {
                            dropabble: true,
                        }
                    },
                });
            });

類型錯誤:無法分配給 object 的只讀屬性 'backgroundColor' '#<object> '<div id="text_translate"><p> 我正在使用 React 創建一個組件,該組件將根據其屬性呈現不同的背景。 但是,我不知道如何在不折疊 React 框架的情況下更改其屬性。 這是我的代碼:</p><pre> const inactiveStyle = { backgroundColor: "", color: "white", }; const activeStyle = { color: "black" }; export default class DrumPad extends Component { constructor(props) { super(props); this.state = { style: inactiveStyle, }; render(){ inactiveStyle.backgroundColor = this.props.backgroundColor return (&lt;div style={this.state.style}&gt;&lt;/div&gt;)</pre><p> 當我嘗試它時,這是我得到的錯誤:</p><p> TypeError:無法分配給 object '#' 的只讀屬性 'backgroundColor'</p><p> 我已嘗試按照<a href="https://stackoverflow.com/questions/52143027/reactjs-typeerror-cannot-assign-to-read-only-property-transform-of-object" rel="nofollow noreferrer">此處</a>的建議進行操作,但它不起作用,因為我的原始代碼已經是一個常量,而不是 state 本身。 請幫忙。</p></div></object>

[英]Type Error: Cannot assign to read only property 'backgroundColor' of object '#<Object>'

無法分配給 # 的只讀屬性<object>使用帶有 Recoil 的 React<div id="text_translate"><p> I'm trying to update my state (an array of objects), but get the above error whenever I try to use.map or edit a clone of the state object.</p><pre> React.useEffect(() =&gt; { setUserMeasurements((oldUserMeasurements) =&gt; { return oldUserMeasurements.map(nameAndMeasure =&gt; { if (nameAndMeasure.name === name) { nameAndMeasure.measure = 60 } return nameAndMeasure; }) })</pre><p> })</p><p> 當我嘗試代碼的“nameAndMeasure.measure = 60”部分時,它似乎不喜歡它,但我不明白為什么。 誰能解釋一下?</p></div></object>

[英]Cannot assign to read only property of #<Object> using React with Recoil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 無法分配給對象 &#39;# 的只讀屬性<Object> &#39; 類型錯誤:無法分配給 object 的只讀屬性 'backgroundColor' '#<object> '<div id="text_translate"><p> 我正在使用 React 創建一個組件,該組件將根據其屬性呈現不同的背景。 但是,我不知道如何在不折疊 React 框架的情況下更改其屬性。 這是我的代碼:</p><pre> const inactiveStyle = { backgroundColor: "", color: "white", }; const activeStyle = { color: "black" }; export default class DrumPad extends Component { constructor(props) { super(props); this.state = { style: inactiveStyle, }; render(){ inactiveStyle.backgroundColor = this.props.backgroundColor return (&lt;div style={this.state.style}&gt;&lt;/div&gt;)</pre><p> 當我嘗試它時,這是我得到的錯誤:</p><p> TypeError:無法分配給 object '#' 的只讀屬性 'backgroundColor'</p><p> 我已嘗試按照<a href="https://stackoverflow.com/questions/52143027/reactjs-typeerror-cannot-assign-to-read-only-property-transform-of-object" rel="nofollow noreferrer">此處</a>的建議進行操作,但它不起作用,因為我的原始代碼已經是一個常量,而不是 state 本身。 請幫忙。</p></div></object> 如何修復錯誤:無法分配給 object '[object Object]' 的只讀屬性 'room' 無法分配給 # 的只讀屬性<object>使用帶有 Recoil 的 React<div id="text_translate"><p> I'm trying to update my state (an array of objects), but get the above error whenever I try to use.map or edit a clone of the state object.</p><pre> React.useEffect(() =&gt; { setUserMeasurements((oldUserMeasurements) =&gt; { return oldUserMeasurements.map(nameAndMeasure =&gt; { if (nameAndMeasure.name === name) { nameAndMeasure.measure = 60 } return nameAndMeasure; }) })</pre><p> })</p><p> 當我嘗試代碼的“nameAndMeasure.measure = 60”部分時,它似乎不喜歡它,但我不明白為什么。 誰能解釋一下?</p></div></object> 無法分配給 # 的只讀屬性“道具”<Object> 在反應原生 無法分配給 object '[object Object]' 的只讀屬性 'name' 無法分配給 object '[object Object]' 的只讀屬性 'winner' 無法分配給 # 的只讀屬性“.js”<Object> 無法分配給 object 的只讀屬性“displayName” 無法分配給 object 的只讀屬性
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM