Comments (4)
You would basically update the prop on every keypress. I would suggest to either debounce the function or move setProp...
to onBlur
.
from craft.js.
I totally agree that I am re-rendering every time, but I am just wondering why
<div>
<EditButton icon={<FormatItalicIcon />} cmd="italic" />
<EditButton icon={<FormatBoldIcon />} cmd="bold" />
<EditButton
cmd="createLink"
arg="https://github.com/lovasoa/react-contenteditable"
icon={<LinkIcon />}
/>
<ContentEditable
html={value} // innerHTML of the editable div
onChange={(e) => {
setProp((prop) =>
setProp((props) => {
props[propKey] = onChange
? onChange(e.target.value)
: e.target.value;
})
);
}} // use true to disable editing
style={{
margin: "27px",
border: "1px solid lightgray",
}}
/>
</div>
works good but not RichTextEditor
from craft.js.
my latter workable fixs
class SmartRichTextEditor extends React.Component {
state = {
value: undefined,
};
shouldComponentUpdate(nextProps, nextState) {
if (
this.props.value ==
RichTextEditor.createValueFromString(nextProps.html, "html")
) {
return false;
}
return true;
}
render() {
console.log("rendering new");
return (
<RichTextEditor
value={
this.state.value
? this.state.value
: RichTextEditor.createValueFromString(this.props.html, "html")
}
onChange={(value) => {
this.setState({ value });
this.props.onChange(value.toString("html"));
}} // use true to disable editing
style={{
margin: "27px",
border: "1px solid lightgray",
}}
/>
);
}
}
from craft.js.
@chungchi300 I'm not familiar with react-rte but typically when a prop passed to a React element changes, it causes the element to re-render under normal circumstances. In the case of a content-editable element that consumes a prop that changes on every key press, it will cause the element to re-render and lose its cursor position.
react-contenteditable
works because it uses a pretty similar workaround as your solution above 💯
from craft.js.
Related Issues (20)
- Make all child editable HOT 1
- Not working in production HOT 2
- How to delete a linked node? HOT 3
- How to make connections two components HOT 3
- Update a Node's prop without polluting editor state history HOT 1
- How to add a custom component to the bottom of the page by clicking on the left side HOT 2
- https://dynamics.sorce.interno/datagrid/forms_dynamic
- Multiple frames inside of an editor HOT 1
- User Component name doesn't change when specified in config HOT 1
- Nested elements are created as Linked Nodes instead of child nodes HOT 1
- How do I drag my saved serialized json into the editor? HOT 4
- The rollup packaging of the Craft.js project was successful, but when used, it reported an error "Buffer is not defined."
- Cancel drop HOT 2
- How do i get my html markup HOT 2
- Craft.js with React version 17 or 18 HOT 1
- Customizeable drag and drop
- Rollup cache is published to NPM
- Avoid animation of the element snapping back to its origin position when element is dropped. HOT 1
- Something like maxlength or max content restrictions
- Rendering a Navbar with dynamic menu items (e.g. Home, Blog) HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from craft.js.