• Stars
    star
    1,540
  • Rank 30,382 (Top 0.6 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 9 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Codemirror Component for React.js

Codemirror

The excellent CodeMirror editor as a React.js component.

Demo & Examples

Live demo: JedWatson.github.io/react-codemirror

To build the examples locally, run:

npm install
npm start

Then open localhost:8000 in a browser.

Installation

The easiest way to use codemirror is to install it from NPM and include it in your own React build process (using Browserify, Webpack, etc).

You can also use the standalone build by including dist/react-codemirror.js in your page. If you use this, make sure you have already included React, and it is available as a global variable.

npm install react-codemirror --save

Usage

Require the CodeMirror component and render it with JSX:

var React = require('react');
var CodeMirror = require('react-codemirror');

var App = React.createClass({
	getInitialState: function() {
		return {
			code: "// Code",
		};
	},
	updateCode: function(newCode) {
		this.setState({
			code: newCode,
		});
	},
	render: function() {
		var options = {
			lineNumbers: true,
		};
		return <CodeMirror value={this.state.code} onChange={this.updateCode} options={options} />
	}
});

React.render(<App />, document.getElementById('app'));

Include the CSS

Ensure that CodeMirror's stylesheet codemirror.css is loaded.

If you're using LESS (similar for Sass) you can import the css directly from the codemirror package, as shown in example.less:

@import (inline) "./node_modules/codemirror/lib/codemirror.css";

If you're using Webpack with the css loader, you can require the codemirror css in your application instead:

require('codemirror/lib/codemirror.css');

Alternatively, you can explicitly link the codemirror.css file from the CodeMirror project in your index.html file, e.g <link href="css/codemirror.css" rel="stylesheet">.

Methods

  • focus focuses the CodeMirror instance
  • getCodeMirror returns the CodeMirror instance, available .

You can interact with the CodeMirror instance using a ref and the getCodeMirror() method after the componentDidMount lifecycle event has fired (including inside the componentDidMount event in a parent Component).

Properties

  • autoFocus Boolean automatically focuses the editor when it is mounted (default false)
  • autoSave Boolean automatically persist changes to underlying textarea (default false)
  • className String adds a custom css class to the editor
  • codeMirrorInstance Function provides a specific CodeMirror instance (defaults to require('codemirror'))
  • defaultValue String provides a default (not change tracked) value to the editor
  • name String sets the name of the editor input field
  • options Object options passed to the CodeMirror instance
  • onChange Function (newValue) called when a change is made
  • onCursorActivity Function (codemirror) called when the cursor is moved
  • onFocusChange Function (focused) called when the editor is focused or loses focus
  • onScroll Function (scrollInfo) called when the editor is scrolled
  • preserveScrollPosition Boolean=false preserve previous scroll position after updating value
  • value String the editor value

See the CodeMirror API Docs for the available options.

Using Language Modes

Several language modes are included with CodeMirror for syntax highlighting.

By default (to optimise bundle size) all modes are not included. To enable syntax highlighting:

  • install the codemirror package dependency (in addition to react-codemirror)
  • require the language modes you wish to make available after you require react-codemirror itself
  • set the mode option in the options object
var React = require('react');
var CodeMirror = require('react-codemirror');
require('codemirror/mode/javascript/javascript');
require('codemirror/mode/xml/xml');
require('codemirror/mode/markdown/markdown');

<CodeMirror ... options={{
	mode: 'javascript',
}} />

See the example source for a reference implementation including JavaScript and markdown syntax highlighting.

License

Copyright (c) 2016 Jed Watson. MIT Licensed.

More Repositories

1

react-select

The Select Component for React.js
TypeScript
27,612
star
2

classnames

A simple javascript utility for conditionally joining classNames together
JavaScript
17,507
star
3

react-hammerjs

ReactJS / HammerJS integration. Support touch events in your React app.
JavaScript
939
star
4

react-tappable

Tappable component for React
JavaScript
861
star
5

react-input-autosize

Auto-resizing input field for React
JavaScript
765
star
6

sydjs-site

SydJS Meetup Website
JavaScript
535
star
7

react-md-editor

React.js Markdown Editor Component
JavaScript
508
star
8

exenv

React's ExecutionEnvironment module extracted for use in other packages & components
JavaScript
232
star
9

generator-react-component

React Component Project Generator
JavaScript
220
star
10

react-date-select

A React Date Select / Picker Input Component
CSS
158
star
11

happiness

Standard customised to make me happy
JavaScript
124
star
12

react-component-gulp-tasks

Common Gulp tasks I use across my React Component projects
JavaScript
112
star
13

react-value

Adding Value to React
JavaScript
91
star
14

node-premailer

Node.js wrapper for premailer.dialect.ca
JavaScript
74
star
15

react-container

A flexible container for laying out React apps. Part of TouchstoneJS.
JavaScript
57
star
16

react-domify

Like JSON.strinfigy but uses React to generate DOM elements
JavaScript
54
star
17

picture-tour-app

Example React.js Cordova / PhoneGap App with Babel, Webpack and Hot Reloading
JavaScript
46
star
18

react-fixed

A lightweight component that sticks to the bottom of the window while scrolling. Neat for toolbars.
JavaScript
33
star
19

generator-react-express

React / Express Project Generator
JavaScript
33
star
20

react-alt-text

React.js Component for displaying alternate text when the [alt] key is pressed
JavaScript
32
star
21

store-prototype

Simple class for creating event-driven Data Stores
JavaScript
32
star
22

keystone-forum

The source code for forums.keystonejs.com (in development)
JavaScript
30
star
23

react-scroll-spy

React.js mixin for updating state based on the window's scroll position
JavaScript
29
star
24

react-context-example

An example / test / playpen looking at how Context works in React.js
JavaScript
27
star
25

node-express-workshop-complete

The complete reference implementation for node-express-workshop
JavaScript
18
star
26

react-date-input

A React.js Date Input Component
CSS
16
star
27

react-express-starter

ReactJS / Express Starter Project
CSS
16
star
28

node-mascot

βœ¨πŸ’πŸš€βœ¨
JavaScript
14
star
29

html-stringify

Converts Javascript Objects or Arrays to pretty HTML
JavaScript
14
star
30

model-transform

Common toJSON Transform for KeystoneJS / Mongoose Models
JavaScript
13
star
31

react-component-starter

ReactJS Component Starter Project
JavaScript
12
star
32

react-conf-2016

React Conf 2016 API
JavaScript
10
star
33

randomkey

Lightweight node.js lib for generating random string keys
JavaScript
10
star
34

prisma-day-keystone-workshop

TypeScript
10
star
35

asyncdi

Async Dependency Injection
JavaScript
9
star
36

block-timer

A node.js timer implementation for timing blocks of code that are run one or more times
JavaScript
8
star
37

node-bpay

Node.JS BPAY Customer Reference Number Generator and Validator
JavaScript
7
star
38

talk-sydjs-webcomponents

Resources for my talk on Web Components at SydJS, June 2014
CSS
6
star
39

keystone-next-prisma-demo

TypeScript
6
star
40

babel-plugin-example

JavaScript
5
star
41

react-sydney-2021-stack

Demo content for my talk at React Sydney, May 2021
TypeScript
5
star
42

list-to-array

Simple javascript lib for converting a [comma || space] delimited string to an array
JavaScript
4
star
43

aba

Deprecated; use aba-generator instead
JavaScript
4
star
44

sydney-mongodb-meetup

The resource files for the hand-on KeystoneJS session @ the Sydney MongoDB Meet-up, 25th Feb 2014
CSS
4
star
45

qs-set

Querystring manipulator for node.js and the browser
JavaScript
2
star
46

prototype-mobile-app

Prototype Mobile App
JavaScript
2
star
47

admin-ui-prototype

Starting from scratch
CSS
2
star
48

editor-ui-playground

TypeScript
1
star