Это приложение, которое при нажатии кнопки добавить рецепт, вызывает всплывающее окно. Это позволяет поместить имя рецепта и ингредиенты рецепта в поля ввода. Нажатие кнопки добавить рецепт в этом всплывающем окне должно отобразить имена рецептов, которые были сохранены в localStorage.
Прямо сейчас мой список рецептов использует пустой массив с именем list и использует цикл for для добавления элементов localStorage в массив list. Прямо сейчас, хотя он работает только при загрузке страницы, не при нажатии на кнопку добавить рецепт. Это потому, что он не в состоянии обновить массив, так как в настоящее время у меня есть его за пределами компонента, но положить его в сделал его не загружать какие-либо элементы списка.
компонент в вопросе:
var React = require("react");
var Recipe = React.createClass({
getInitialState: function() {
return {
list: ""
};
},
updateList: function() {
var list = [];
for (let i = 0; i < window.localStorage.length - 1; i++) {
var key = window.localStorage.key(i);
list.push(window.localStorage.getItem(key));
}
this.setState({
list: list
});
},
componentDidMount: function() {
this.updateList();
},
render: function() {
return (
<div className="full-recipe">
{this.state.list.map(function(item) {
return (
<div className="recipe">
<h2>{item.name}</h2>
</div>
);
})}
<button onClick={function() { this.updateList()}}>refresh the list</button>
</div>
);
}
});
module.exports = Recipe;
полный код: https://github.com/jeffm64/recipe-box/blob/master/src/components/recipe.js
я проверил ваш код, вы можете изменить функцию addRecipe в popupbox.js к этому:
затем updateList:
и не забывайте о клавише в функции рендеринга
Лучше держать весь доступ к localStorage в одном месте, в Родительском компоненте, и распространять его вниз с помощью реквизитов.
Дочерний компонент (например, ваш ‘pop up’) может получить функцию обратного вызова через реквизит, чтобы распространить что-то обратно вверх.
Эта официальная статья объясняет это красиво:
https://facebook.github.io/react/docs/thinking-in-react.html
И вот очень простой пример этого происходящего:
http://codepen.io/anon/pen/MbMrdL?editors=1010