Skip to content

Instantly share code, notes, and snippets.

View hckhanh's full-sized avatar
🍊
Peace

Khánh Hoàng hckhanh

🍊
Peace
View GitHub Profile
@hckhanh
hckhanh / BlogPost.js
Last active February 9, 2019 14:07
Use useEffect to handle componentDidMount
import React, { useEffect, useState } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export function BlogPost({ id }) {
// State is declared in pair: state value and setState function
const [data, setData] = useState(DataSource.getBlogPost(id));
// Similar to componentDidMount and componentDidUpdate:
@hckhanh
hckhanh / EditableItem.js
Last active February 9, 2019 13:45
editMode will be declared inline
import PropTypes from 'prop-types';
import React, { Fragment, useState } from 'react';
import EditModeItem from './EditModeItem';
import './style.scss';
import ViewModeItem from './ViewModeItem';
export default function EditableItem({ data }) {
const [editMode, setEditMode] = useState(false);
return (
<Fragment>
@hckhanh
hckhanh / BlogPost.js
Last active February 9, 2019 14:07
Use useState instead of class component
import React, { useState } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export function BlogPost({ id }) {
// State is declared in pair: state value and setState function
const [data, setData] = useState(DataSource.getBlogPost(id));
return <TextBlock text={data} />;
@hckhanh
hckhanh / EditableItem.js
Created February 9, 2019 13:24
Need manage editMode state
import PropTypes from 'prop-types';
import React, { Component, Fragment } from 'react';
import EditModeItem from './EditModeItem';
import './style.scss';
import ViewModeItem from './ViewModeItem';
export default class EditableItem extends Component {
constructor(props) {
super(props);
this.state = { editMode: false };
@hckhanh
hckhanh / BlogPost.js
Last active February 9, 2019 14:08
Full stateful implementation
import React, { Component } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export class BlogPost extends Component {
constructor(props) {
super(props);
this.state = {
data: DataSource.getBlogPost(props.id)
@hckhanh
hckhanh / CommentList.js
Last active February 9, 2019 14:09
higher-order component injected
import React, { Component } from "react";
import DataSource from "../DataSource";
import withSubscription from "./withSubscription";
const Comment = ({ comment }) => <>{comment}</>;
class CommentList extends Component {
render() {
return (
<>
@hckhanh
hckhanh / BlogPost.diff
Last active February 9, 2019 14:09
higher-order component injected
import React, { Component } from "react";
-import DataSource from "../DataSource";
+import withSubscription from "./withSubscription";
const TextBlock = ({ text }) => <>{text}</>;
class BlogPost extends Component {
- constructor(props) {
- super(props);
- this.state = {
@hckhanh
hckhanh / withSubscription.js
Last active February 9, 2019 14:10
Implementation for HOC
import React, { Component } from "react";
import DataSource from "../DataSource";
export default function withSubscription(Component, selectData) {
return class extends Component {
constructor(props) {
super(props);
this.state = {
data: selectData(DataSource, props)
};
@hckhanh
hckhanh / CommentList.js
Last active February 9, 2019 14:10
without higher-order component
import React, { Component } from "react";
import DataSource from "../DataSource";
const Comment = ({ comment }) => <>{comment}</>;
export class CommentList extends Component {
constructor(props) {
super(props);
this.state = {
data: DataSource.getComments()
@hckhanh
hckhanh / BlogPost.js
Last active February 9, 2019 14:10
without higher-order component
import React, { Component } from "react";
import DataSource from "../DataSource";
const TextBlock = ({ text }) => <>{text}</>;
export class BlogPost extends Component {
constructor(props) {
super(props);
this.state = {
data: DataSource.getBlogPost(props.id)