This demo shows,
1. Updating a list within the react component
2. Updating a list in child react component by passing 'state' as 'props'
3. Updating simple 'props'
4. All the updates are on 'Enter Key' press on an input field.
//demo.js
import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import List from "@material-ui/core/List";
import ListItem from "@material-ui/core/ListItem";
import ListItemText from "@material-ui/core/ListItemText";
import ListSubheader from "@material-ui/core/ListSubheader";
import TextField from "@material-ui/core/TextField";
const styles = theme => ({
root: {
width: "100%",
maxWidth: 360,
backgroundColor: theme.palette.background.paper,
position: "relative",
overflow: "auto",
maxHeight: 300
},
listSection: {
backgroundColor: "inherit"
},
ul: {
backgroundColor: "inherit",
padding: 0
}
});
class RestTest extends React.Component {
constructor(props) {
super(props);
this.state = {
searchkey: "Jurassic",
movies: [],
keye: "yyy",
mo: [
{
Title: "Jurassic World",
Type: "movie",
Year: "2015",
imdbID: "tt0369610"
},
{
Title: "Jurassic World11",
Type: "movie",
Year: "2015",
imdbID: "tt03696101"
}
]
};
}
handleChange = searchkey => event => {
if (event.key === "Enter") {
event.currentTarget.style.backgroundColor = "#cfffff";
this.setState({
[searchkey]: event.target.value
});
console.log("enter press here! ");
this.callRest(event.target.value);
// console.log(" movies here! ", this.state.movies);
}
};
// componentDidMount() {
callRest(searchkey) {
console.log(" searchkey here! ", searchkey);
const axios = require("axios");
// Is there a React-y way to avoid rebinding `this`? fat arrow?
const th = this;
const url = `https://www.omdbapi.com/?s=${searchkey}&apikey=1149d830`;
axios
.get(url)
.then(response => {
// handle success
this.setState({
movies: response.data.Search,
keye: "hihi"
});
console.log("res...", this.state.movies);
})
.catch(function(error) {
// handle error
console.log(error);
})
.then(function() {
// always executed
return false
});
}
componentWillUnmount() {
// this.serverRequest.abort();
}
render() {
const { classes } = this.props;
return (
<div>
<TextField
id="searchkey"
label="search keyword"
className={classes.textField}
defaultValue="Jurassic"
onKeyPress={this.handleChange("searchkey")}
margin="normal"
/>
{this.state.mo.map(movie => (
<p key={movie.imdbID}>Title : {movie.Title} </p>
))}
<PinnedSubheaderList
classes={this.props.classes}
keye={this.state.keye}
movies={this.state.movies}
{...this.state}
/>
</div>
);
}
}
function PinnedSubheaderList(props) {
const { classes } = props;
if (props.movies){
return (
<div>
<h1>{props.keye}</h1>
{ props.movies.map(movie => (
<p key={movie.imdbID}>Title : {movie.Title}</p>
))}
</div>
);
}else { return (<h1>{`No data found`}</h1>)}
}
export default withStyles(styles)(RestTest);
//index.js
import React from 'react';
import { render } from 'react-dom';
import Demo from './demo';
const rootElement = document.querySelector('#root');
if (rootElement) {
render(<Demo />, rootElement);
}
//index.html
<body>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<div id="root"></div>
</body>
Comments
Post a Comment