View on GitHub

marymafa.github.io


layout: post title:

React

React is a JavaScript library for building user interfaces. It uses an XML-like syntax called JSX. JSX is not required to use React, but it makes code more readable, and writing it feels like writing HTML. A simple transform is included with React that allows converting JSX into native JavaScript for browsers to digest.

React components implement a render() method that takes input data and returns what to display. This example uses an XML-like syntax called JSX. Input data that is passed into the component can be accessed by render() via this.props.

For example:

class HelloMessage extends React.Component { render() { return ( <div> Hello {this.props.name} </div> ); } }

ReactDOM.render(

, mountNode );

In addition to taking input data (accessed via this.props), a component can maintain internal state data (accessed via this.state). When a component’s state data changes, the rendered markup will be updated by re-invoking render().

for example:

class Timer extends React.Component { constructor(props) { super(props); this.state = { seconds: 0 }; }

tick() { this.setState(prevState => ({ seconds: prevState.seconds + 1 })); }

componentDidMount() { this.interval = setInterval(() => this.tick(), 1000); }

Using props and state, we can put together a small Todo application. This example uses state to track the current list of items as well as the text that the user has entered. Although event handlers appear to be rendered inline, they will be collected and implemented using event delegation.

for example:

class MarkdownEditor extends React.Component { constructor(props) { super(props); this.handleChange = this.handleChange.bind(this); this.state = { value: ‘Type some markdown here!’ }; }

handleChange(e) { this.setState({ value: e.target.value }); }

getRawMarkup() { const md = new Remarkable(); return { __html: md.render(this.state.value) }; }

render() { return ( <div className="MarkdownEditor"> <h3>Input</h3> <textarea onChange={this.handleChange} defaultValue={this.state.value} /> <h3>Output</h3> <div className=”content” dangerouslySetInnerHTML={this.getRawMarkup()} /> </div> ); } }

ReactDOM.render(, mountNode);