私はFoundation Modalを組み込むことを試みて、もちろん "Todo"アプリをやっています。 3つのコンポーネント、TodoList.jsx、Todo.jsx、TodoModal.jsxがあります。React + Foundation - クリックで異なる小道具でモーダルをレンダーする
私が望むのは、todoの各項目の下に表示され、todoの内容でモーダルをポップアップするリンクです。私の問題:私は、モーダルを起動することができますが、同じモーダルは、クリックするリンク先に関係なくポップアップします。私はTodoModal.jsxの小道具を更新することができず、Reactのコンポーネントライフサイクルかもしれないようですが、先を進めるためには本当に助けが必要です。私はちょうどオンラインのReactコースを受講したので、私はまだ新しいです。どんな助けでも大歓迎です!
以下はTodoList.jsx(TodoModal.jsxとTodo.jsxにtodoデータを送信する)とTodoModal.jsxです。
TodoList.jsx
var React = require('react');
var {connect} = require('react-redux');
import Todo from 'Todo';
var TodoAPI = require('TodoAPI');
import TodoModal from 'TodoModal';
export var TodoList = React.createClass({
render: function() {
var {todos, showCompleted, searchText} = this.props;
var renderTodos =() => {
var filteredTodos = TodoAPI.filterTodos(todos, showCompleted, searchText);
if (filteredTodos.length === 0) {
return ( <p className="container__message">Nothing To Do</p> );
}
return filteredTodos.map((todo) => {
return (
<div>
<Todo key={todo.id} {...todo}/>
<div>
<a data-open="item-modal">
{todo.id}
</a>
<TodoModal todo={todo}/>
</div>
</div>
);
});
};
return (
<div>
{renderTodos()}
</div>
)
}
});
export default connect((state) => {return state })(TodoList);
TodoModal.jsx:
var React = require('react');
var ReactDOM = require('react-dom');
var ReactDOMServer = require('react-dom/server');
var TodoModal = React.createClass({
componentDidMount: function() {
var modalMarkup = (
<div id="item-modal" className="reveal tiny text-center" data-reveal="">
<h4>{this.props.todo.text}</h4>
<p>{this.props.todo.id}</p>
<p>
<button className="button hollow" data-close="">
Okay
</button>
</p>
</div>
);
var $modal = $(ReactDOMServer.renderToString(modalMarkup));
$(ReactDOM.findDOMNode(this)).html($modal);
var modal = new Foundation.Reveal($("#item-modal"));
},
componentWillReceiveProps: function (newProps) {
console.log(newProps)
},
render: function() {
return (<div> </div>);
}
});
module.exports = TodoModal;
ありがとうございました@Fizz!これは私がやりたいことに役立ちます。財団の部分を無視して、TodoModal.jsxへのリンクをクリックした後、どのように小道具を送ることができるかを詳しく説明できますか?私は 'componentWillReceiveProps'を追加しましたが、私はそれが小道具を受け取るのに困っています。 – jbro
@Fizzの説明をありがとうございます。私は、あなたの提案を、 "showModal"フラグと共に、私が状態と追跡していたのと一緒に使用しました。 – jbro